Setter方法很奇怪,有人可以解释一下

时间:2013-06-08 23:28:18

标签: objective-c getter-setter

我正在查看iOS的开发人员库。一个名为masterBirdSightingList的属性是使用类型NSMutableArray创建的。这很好,在实现中他们添加了这段代码

- (void)setMasterBirdSightingList:(NSMutableArray *)newList {
    if (_masterBirdSightingList != newList) {
        _masterBirdSightingList = [newList mutableCopy];
    }
}

为了

  

为主列表属性实现自定义setter ...(和)覆盖其默认的setter方法,以确保新数组保持可变。

我不太清楚为什么这是完全必要的。当然,数组不能突然从可变数组变为静态数组。这种方法是否必要?

您是否也可以帮助澄清每次setMasterBirdSightingList设置时是否调用方法masterBirdSightingList

我正在谈论的教程是available here,大约是页面的一半。

谢谢

1 个答案:

答案 0 :(得分:3)

  

您是否还可以帮助澄清每次setMasterBirdSightingList设置时是否调用方法masterBirdSightingList

是的,它是 - 在Objective-C中,使用getter和setter方法实现属性访问。没有例外。点符号只是- (T)foo- (void)setFoo:(T)arg的语法糖。

  

我不太清楚为什么这是完全必要的。

因为如果您刚刚声明了copy属性,那么在设置数组时,它将发送copy消息,并返回不可变副本(在Cocoa中) [Touch],copy返回不可变副本的常见约定,即使原始对象是可变的。)

这就是为什么需要明确地向参数发送mutableCopy