1

UIToolbar 和 UITabBar 的 items 属性被指定为复制(copy)属性。

@property(nonatomic,copy)   NSArray   *items;

但这是为什么呢?(复制)不会深复制 NSArray,那么让这些属性浅复制项目的 NSArray 的动机是什么?

4

3 回答 3

2

这对于类集群成员来说是非常标准的NSMutableXXX,您应该在自己的属性中执行相同的操作。例如,如果你有一个 NSString 属性,你应该创建它copy,而不仅仅是strong,以免客户端给你一个 NSMutableString,保留对它的引用,然后改变它。

copy并且mutableCopy仅用作在 NSArray 和 NSMutableArray 等之间切换的轻量级方式。

于 2013-05-16T21:03:04.363 回答
1

关键是他们不希望你改变他们背后的阵列。他们也不想让你改变UIBarButtonItems。从技术上讲,您不知道访问器在内部做什么(据我们所知,它可以进行深度复制),但该属性告诉您它至少会复制数组,因此如果您选择在之后更改数组内容(假设它是可变的)那么一切都会继续工作。

于 2013-05-16T20:59:32.047 回答
1

因为您可能会分配一个可变数组。该副本确保如果您在将可变数组分配给工具栏后对其进行更新,则工具栏不会受到影响。

于 2013-05-16T20:57:59.230 回答