Apple正在研究Your Second iOS App。该项目基于ARC。
在研究这个例子时,我对该示例中的以下代码提出了一个问题:
// 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
类型的参数调用?
答案 0 :(得分:2)
这是必需的,因为默认实现只会调用copy
,最终会得到一个不可变数组,而不是一个可变数组。