我正在学习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