博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
atomic,nonatomic
阅读量:5098 次
发布时间:2019-06-13

本文共 759 字,大约阅读时间需要 2 分钟。

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

        atomic

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

                在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:
                        {lock}
                                if (property != newValue) { 
                                        [property release]; 
                                        property = [newValue retain]; 
                                }
                        {unlock}
 
    注意:
      手动维护线程锁和atomic的线程安全使用的区别
        atomic 只是对属性setter方法赋值操作语句的加锁保护, 这样可能达不到线程安全的目的,手动维护一个线程锁可以对一些操作进行加锁,比atomic更安全
 

        nonatomic

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

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

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

 
 

转载于:https://www.cnblogs.com/W-Kr/p/5197117.html

你可能感兴趣的文章
mysql数据库中导入txt文本数据的方法
查看>>
JavaScriptSerializer的实现-常用JsonHelper类
查看>>
Mahout0.9的安装与测试
查看>>
DropDownList在GridView编辑时设置默认选项
查看>>
function pointer demo in C language
查看>>
JavaScript小笔记
查看>>
文章翻页英文单词分割问题解决方案
查看>>
201_Qt5.3.2Code
查看>>
ScriptableObject 对象化的运用
查看>>
scrapy中cookie处理
查看>>
mysql-5.7.10-winx64 安装
查看>>
C#-WebService基础01
查看>>
C#-readonly与const不同
查看>>
启动外部exe程序
查看>>
Linux学习笔记(1)
查看>>
iOS判断某中类型是否来自系统NSFoundation
查看>>
CLR via C#深解笔记一 - CLR & C# 基础概念
查看>>
mysql 多表查询
查看>>
49. Group Anagrams
查看>>
OO第四单元博客作业
查看>>