我正在學習Apple的Your Second iOS App。該項目基於ARC。爲什麼mutableCopy在這裏?
而且在學習的例子,我曾與從上述例子中,下面的代碼一個問題:
// header
@interface BirdSightingDataController : NSObject
@property (nonatomic, copy) NSMutableArray *masterBirdSightingList;
@end
// implementation
- (void)setMasterBirdSightingList:(NSMutableArray *)newList {
if (_masterBirdSightingList != newList) {
_masterBirdSightingList = [newList mutableCopy];
}
}
- (void)initializeDefaultDataList {
NSMutableArray *sightingList = [[NSMutableArray alloc] init];
self.masterBirdSightingList = sightingList;
…
}
我不知道爲什麼這個代碼推翻的masterBirdSightingList
默認setter方法。
masterBirdSightingList
屬性的類型爲NSMutableArray
,並且被複制到_masterBirdSightingList
實例變量,該變量的類型也是NSMutableArray
。我認爲這是完美的。
爲什麼_masterBirdSightingList = [newList mutableCopy];
在這裏?以防萬一setMasterBirdSightingList:
被稱爲NSArray
類型的參數?
我會說是的,這是考慮到傳遞靜態數組的情況。因爲masterBirdSightingList被聲明爲可變數組,所以此代碼強制執行該操作,以防止其他代碼嘗試對NSArray進行變異時出現問題 – Bergasms 2013-02-13 03:47:43
有趣的是,即使調用者將可變數組傳遞給setter,這也是必需的。 – 2013-02-13 03:52:03
這裏是否有'copy'標記?我只是在那裏告訴編譯器如何綜合屬性訪問器,因爲它們不是在這裏被合成的... – cHao 2013-02-13 03:53:04