美文网首页
Property Attribute

Property Attribute

作者: KGBer | 来源:发表于2016-04-26 18:43 被阅读0次

    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; // 这时这两个数组指向的仍然是同一个对象

    相关文章

      网友评论

          本文标题:Property Attribute

          本文链接:https://www.haomeiwen.com/subject/kvaqrttx.html