Property Attribute

copy

@property (nonatomic, copy) NSArray *immutableArray;

当 property 使用 copy 来修饰时,在 setter 方法里会调用新值的 -copy 方法产生一个不可变的对象,再用这个对象进行赋值。
于是就有了使用 copy 时要注意的点:

  1. 必须遵守 NSCopying 协议;
  2. 一般用在不可变集合类上:
    如:
    NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:@[@1, @2, @3]];
    self.immutableArray = mutableArray;
    [mutableArray removeAllObjects];
    这时即使可变数组清空了所有对象,self.immutableArray 的内容也不会改变,
    因为此时这两个数组指向的已不是同一个对象,这就是 copy 的作用。
    此处换成 strong 就没有这个效果了。

所以,使用 copy 能避免可变集合(如:mutableArray)给不可变集合(如:self.immutableArray)赋值时可能产生的错误,毕竟我们希望 self.immutableArray 的内容能够保持不变,而 mutableArray 在赋值完成后有可能会做一些内容的更改,自然就不能让他们指向同一个对象了。

再有,直接通过该属性对应的实例变量来赋值的话,copy 是不起作用的:
_immutableArray = mutableArray; // 这时这两个数组指向的仍然是同一个对象

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的...
    Jt_Self阅读 775评论 0 4
  • 文|青岩 这个世界走得太快,稍有怠慢就被甩出一大截。 (图:彭敏) 在这个网络化、信息化、便捷化的时代,快是形式,...
    言恰如心阅读 213评论 0 0
  • 不得不说,小胖是个有时候让人讨厌的胖子。 比如在帮他买衣服的时候。前几天废了半天劲终于在网上掏了一件合适的,因为小...
    这位宝宝阅读 188评论 1 1
  • 本意南方暖 薄衣已可穿 不想归北后 又减一件衫
    燕子陵阅读 236评论 1 5
  • 人在旅途 总是喜欢人在旅途的感觉。陌生的城市、奇异的风光、...
    闽娟子阅读 311评论 0 7