我下面的官方教程你的第二個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。 –