2

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

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

为了

为主列表属性实现自定义设置器...(并且)覆盖其默认设置器方法以确保新数组保持可变。

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

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

我正在谈论的教程在页面的一半左右可用。

谢谢

4

1 回答 1

3

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

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

我不太确定为什么这是完全必要的。

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

这就是为什么mutableCopy需要显式发送到参数的原因。

于 2013-06-08T23:32:21.003 回答