美文网首页
属性readwrite、readonly、assign、reta

属性readwrite、readonly、assign、reta

作者: 西门丨不吹雪 | 来源:发表于2016-07-23 15:14 被阅读180次

1.readwrite:修饰对象可读可写,会生成getter和setter方法
2.readonly:修饰对象仅可读,只生成getter方法
3.assign:修饰基本数据类型(NSInteger,CGFloat)和C数据类型(int, float, double, char)
4.retain:修饰对象类型,指定强引用与strong一样,引用计数+1
5.copy:深拷贝,源对象引用计数不变,副本对象引用计数+1,常用修饰字符串

  • copy 与 retain 的区别
    copy: 创建一个新的对象,新的对象引用计数加1,被copy对象的引用计数不变,改变新拷贝的对象时,被拷贝的对象不会发生改变,两者无直接联系
    retain:创建一个指针,对象的引用计数加1,两个指针同时指向同一对象,新旧指针都可以改变对象的值
    retain属性表示两个对象地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1。也就是说,retain 是指针拷贝,copy 是内容拷贝。

6.nonatomic:如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成一些互斥加锁代码,不用耗费系统资源,可以提高效率。

  • nonatomic和atomic对比
    atomic:线程安全,需要消耗大量的资源
    nonatomic:非线程安全,适合内存小的移动设备

总结
关于nonatomic是线程不安全的,当有多个线程同时修改属性name的值的时候,拿到的结果可能不是自己想要的,因为当属性设置nonatomic的话是允许多个线程是可以同时修改name的值。
简单来说atomic是串行,nonatomic是并行,但如果要真正实现防止多线程修改某属性的值的时候,单单设atomic是不够的,还需要更完善的防止手法

相关文章

网友评论

      本文标题:属性readwrite、readonly、assign、reta

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