gpt4 book ai didi

objective-c - 简单的 iOS 代码行解释

转载 作者:行者123 更新时间:2023-11-28 20:26:12 24 4
gpt4 key购买 nike

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

这行和我合成的一样吗?如果不是,那有什么不同?

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

最佳答案

如果属性定义为:

@property (nonatomic, copy) NSMutableArray *masterBirdSightingList;

然后实现此方法与简单地使用 @synthensize masterBirdSightingList; 不同。

使用默认的合成 setter 为可变容器类型定义具有 copy 语义的属性实际上并没有像预期的那样工作。

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

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

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

关于objective-c - 简单的 iOS 代码行解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13848244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com