UIToolbar 和 UITabBar 的 items 属性被指定为复制(copy)属性。
@property(nonatomic,copy) NSArray *items;
但这是为什么呢?(复制)不会深复制 NSArray,那么让这些属性浅复制项目的 NSArray 的动机是什么?
UIToolbar 和 UITabBar 的 items 属性被指定为复制(copy)属性。
@property(nonatomic,copy) NSArray *items;
但这是为什么呢?(复制)不会深复制 NSArray,那么让这些属性浅复制项目的 NSArray 的动机是什么?
这对于类集群成员来说是非常标准的NSMutableXXX
,您应该在自己的属性中执行相同的操作。例如,如果你有一个 NSString 属性,你应该创建它copy
,而不仅仅是strong
,以免客户端给你一个 NSMutableString,保留对它的引用,然后改变它。
copy
并且mutableCopy
仅用作在 NSArray 和 NSMutableArray 等之间切换的轻量级方式。
关键是他们不希望你改变他们背后的阵列。他们也不想让你改变UIBarButtonItem
s。从技术上讲,您不知道访问器在内部做什么(据我们所知,它可以进行深度复制),但该属性告诉您它至少会复制数组,因此如果您选择在之后更改数组内容(假设它是可变的)那么一切都会继续工作。
因为您可能会分配一个可变数组。该副本确保如果您在将可变数组分配给工具栏后对其进行更新,则工具栏不会受到影响。