iOS

.readwrite,readonly,assign,retain,copy,nonatomic属性的作用

发布于 2020-01-12 22:12:52
关注者
0
被浏览
373
1 个回答
  • 面试哥
    面试哥 2020-01-12
    为面试而生,有面试问题,就找面试哥。

    @property是一个属性访问声明,扩号内支持以下几个属性:

    1,getter=getterName,setter=setterName,设置setter与getter的方法名

    2,readwrite,readonly,设置可供访问级别

    2,assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题

    3,retain,setter方法对参数进行release旧值再retain新值,所有实现都是这个顺序(CC上有相关资料)

    4,copy,setter方法进行Copy操作,与retain处理流程一样,先旧值release,再Copy出新的对象,retainCount为1。这是为了减少对上下文的依赖而引入的机制。

    copy是在你不希望a和b共享一块内存时会使用到。a和b各自有自己的内存。

    5,nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。锁被加到所属对象实例级(我是这么理解的...)。

    atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。在多线程环境下,原子操作是必要的,否则有可能引起错 误的结果。加了atomic,setter函数会变成下面这样:

知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看