为什么UIToolbar和UITabBar(copy)属性中的items属性而不是(retain)

时间:2013-05-16 20:52:57

标签: ios objective-c uikit

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

@property(nonatomic,copy)   NSArray   *items;

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

3 个答案:

答案 0 :(得分:2)

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

copymutableCopy仅用作在NSArray和NSMutableArray等之间切换的轻量级方式。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

重点是他们不希望你改变他们背后的阵列。他们真的不希望你改变UIBarButtonItem。从技术上讲,你不知道访问者在内部做了什么(它可以深入复制我们所知道的所有内容)但是属性告诉你它至少会复制数组,这样如果你选择之后更改数组内容(假设它是可变的)然后一切都会继续发挥作用。