ios atomic nonatomic区别

Posted Hai_阔天空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios atomic nonatomic区别相关的知识,希望对你有一定的参考价值。

atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。

        atomic

                设置成员变量的@property属性时,默认为atomic,提供多线程安全。

                在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:
                        {lock}
                                if (property != newValue) { 
                                        [property release]; 
                                        property = [newValue retain]; 
                                }
                        {unlock}

        nonatomic

        禁止多线程,变量保护,提高性能。

        atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。

        指出访问器不是原子操作,而默认地,访问器是原子操作。这也就是说,在多线程环境下,解析的访问器提供一个对属性的安全访问,从获取器得到的返回值或者通过设置器设置的值可以一次完成,即便是别的线程也正在对其进行访问。如果你不指定 nonatomic ,在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了 nonatomic ,那么访问器只是简单地返回这个值。

以上是关于ios atomic nonatomic区别的主要内容,如果未能解决你的问题,请参考以下文章

nonatomic与atomic的区别与作用

atomic与nonatomic,assign,copy与retain的定义和区别

iOS 开发 nonatomic 和 atomic

ios 原子属性nonatomic/atomic

原子性atomic/nonatomic

iOS核心笔记——多线程-原子/非原子属性