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