0

我正在做“你的第二个应用程序”教程,它让我添加下面的代码行,它是 masterBirdSightingList 属性的设置器。我只是有一个基本的问题:

这条线和我合成它一样吗?如果不是,是什么让它与众不同?

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

1 回答 1

3

如果属性定义为:

@property (nonatomic, copy) NSMutableArray *masterBirdSightingList;

那么实现此方法与简单地使用@synthensize masterBirdSightingList;.

使用默认的综合设置器为可变容器类型定义具有copy语义的属性实际上并不能按预期工作。

如果没有显式方法,您实际上最终会得到引用数组不可变副本的属性。

通过使用您发布的代码,而不是依赖于综合方法,您可以获得正确且预期的行为,即拥有原始数组的可变副本。

另一种看待这个问题的方法是调用copyanNSMutableArray返回 an NSArray,而不是 an NSMutableArray。这就是为什么默认的综合属性设置器不能按预期工作的原因(在处理可变容器属性时)。所以你必须自己实现setter并调用mutableCopy参数。

于 2012-12-12T20:51:04.210 回答