我下面的官方教程你的第二个iOS应用:故事板它告诉我申报了财产masterBirdSightingList像这样(只是一个具体的例子,并没有必要知道上下文):分配NSMutableArray里与@property和“复制”属性
@property (nonatomic, copy) NSMutableArray *masterBirdSightingList;
注意,有一个属性复制。然后合成这种特性:
@synthesize masterBirdSightingList = _masterBirdSightingList;
而旁边还有这让我困惑一个init方法:
- (void)initializeDefaultDataList {
NSMutableArray *sightingList = [[NSMutableArray alloc] init];
self.masterBirdSightingList = sightingList;
[self addBirdSightingWithName:@"Pigeon" location:@"Everywhere"];
}
绝对sightingList分配的空间,那么它分配给masterBirdSightingList财产。不过,该属性有副本属性。这意味着实例变量_masterBirdSightingList将被分配给另一空间以保留来自sightingList的东西。为什么?为什么不直接像这样的财产分配空间:
self.masterBirdSightingList = [[NSMutableArray alloc] init];
他们是一样的。 – kennytm
我不知道该声明self.masterBirdSightingList = sightingList只是一个简单的复制操作,只复制引用OR它会分配一个新的空间来存储内容? thx – lookof
值得关注的东西:通常,一个“可变”对象的-copy方法将返回非可变变体(在你的情况下,一个NSArray)。为了防止发生异常,您必须自己编写setter方法来调用-mutableCopy。 –