美文网首页
iOS开发中属性修饰词的区别

iOS开发中属性修饰词的区别

作者: 玄裳 | 来源:发表于2016-12-20 16:17 被阅读0次
  • strong
    直接赋值,强引用,持有对象,引用计数+1,相当于MRC下的Retain。

  • weak
    直接赋值,弱引用(可打破循环引用),不持有对象,引用计数不变,修饰的对象释放后自动置为nil。只能修饰对象,不能修饰基本数据类型。

  • assign (系统默认)
    直接赋值,弱引用,引用计数不变,用来修饰基本数据类型,属性默认是assgin修饰的。也可以用来修饰对象,但是对象销毁后不会置为nil,可能造成野指针。

  • copy
    遵循NSCopyingNSMutableCopying协议,分别返回可变和不可变对象。
    MRC下,释放旧的对象,指针指向新的对象。
    ARC下,如果是不可变对象Copy,没生成新对象,只会复制指针(浅拷贝),修改copy后的对象,原来的对象也会受影响(理解为两个指针访问同一个内容)。

    如果是可变对象copy,变为不可变对象,且生成一份新对象,复制一份内容(深拷贝),修改copy后的对象,原来的对象不受影响(理解为两个指针分别访问两份相同的内容)。PS:可变对象copy后变为不可变对象不可在调用add/remove/insert等函数方法,否则会导致Crash。

  • retain
    相当于浅拷贝,只复制指针,不复制内容(几个指针可以共同访问同一个内容)。持有对象,引用计数+1。

  • nonatomic
    非原子性操作,访问速度快,但是如果多个线程访问同一个属性,会出现数据竞争。

  • atomic(系统默认)
    原子性操作,只是系统对于set/get方法操作会加入一个锁@synchronized()保证读写操作是完整的(比较消耗性能),不受其他线程影响,并不能保证线程安全。

  • readwrite (系统默认)
    Xcode帮开发者生成Set和Get方法

  • readonly
    Xcode帮开发者只生成Get方法(外界只可以访问不可以修改)

相关文章

网友评论

      本文标题:iOS开发中属性修饰词的区别

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