【发布时间】:2012-05-30 07:00:24
【问题描述】:
我正在关注一个官方教程 Your second iOS App:Storyboard,它告诉我要像这样声明一个属性 masterBirdSightingList(只是一个具体的例子,不需要了解上下文):
@property (nonatomic, copy) NSMutableArray *masterBirdSightingList;
请注意,有一个属性 copy。然后合成这个属性:
@synthesize masterBirdSightingList = _masterBirdSightingList;
接下来是一个让我困惑的初始化方法:
- (void)initializeDefaultDataList {
NSMutableArray *sightingList = [[NSMutableArray alloc] init];
self.masterBirdSightingList = sightingList;
[self addBirdSightingWithName:@"Pigeon" location:@"Everywhere"];
}
肯定会为空间分配SightingList,然后将其分配给masterBirdSightingList 属性。不过,该属性有一个 copy 属性。这意味着实例变量 _masterBirdSightingList 将被分配给另一个空间以保存 sightingList 中的内容。为什么?为什么不直接为这个属性分配空间:
self.masterBirdSightingList = [[NSMutableArray alloc] init];
【问题讨论】:
-
我想知道语句 self.masterBirdSightingList =SightingList 只是一个简单的复制操作,它只复制引用或者它会分配一个新的空间来存储内容?谢谢
-
值得关注的事情:通常,“可变”对象的 -copy 方法将返回非可变变体(在您的情况下为 NSArray)。为了防止异常,你必须自己编写setter方法来调用-mutableCopy。
标签: objective-c ios