我正在跟随官方教程你的第二个iOS应用程序:Storyboard,它告诉我要像这样声明一个属性masterBirdSightingList(只是一个具体的例子,不需要知道上下文):
@property (nonatomic, copy) NSMutableArray *masterBirdSightingList;
请注意,这里有一个属性copy。然后合成此属性:
@synthesize masterBirdSightingList = _masterBirdSightingList;
接下来有一个init方法让我感到困惑:
- (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];