我正在查看iOS的开发人员库。一个名为masterBirdSightingList
的属性是使用类型NSMutableArray
创建的。这很好,在实现中他们添加了这段代码
- (void)setMasterBirdSightingList:(NSMutableArray *)newList {
if (_masterBirdSightingList != newList) {
_masterBirdSightingList = [newList mutableCopy];
}
}
为了
为主列表属性实现自定义setter ...(和)覆盖其默认的setter方法,以确保新数组保持可变。
我不太清楚为什么这是完全必要的。当然,数组不能突然从可变数组变为静态数组。这种方法是否必要?
您是否也可以帮助澄清每次setMasterBirdSightingList
设置时是否调用方法masterBirdSightingList
?
我正在谈论的教程是available here,大约是页面的一半。
谢谢
答案 0 :(得分:3)
您是否还可以帮助澄清每次
setMasterBirdSightingList
设置时是否调用方法masterBirdSightingList
?
是的,它是 - 在Objective-C中,使用getter和setter方法实现属性访问。没有例外。点符号只是- (T)foo
和- (void)setFoo:(T)arg
的语法糖。
我不太清楚为什么这是完全必要的。
因为如果您刚刚声明了copy
属性,那么在设置数组时,它将发送copy
消息,并返回不可变副本(在Cocoa中) [Touch],copy
返回不可变副本的常见约定,即使原始对象是可变的。)
这就是为什么需要明确地向参数发送mutableCopy
。