iOS开发多线程篇---atomic nonatomic区别

转载 2015年07月06日 21:25:57
  • atomic:默认是有该属性的,这个属性是为了保证程序在多线程情况下,编译器会自动生成一些互斥加锁代码,避免该变量的读写不同步问题。
    nonatomic:如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成一些互斥加锁代码,可以提高效率。

  • atomic的意思就是setter/getter这个函数,是一个原语操作。如果有多个线程同时调用setter的话,不会出现某一个线程执行完setter全部语句之前,另一个线程开始执行setter情况,相当于函数头尾加了锁一样,可以保证数据的完整性。nonatomic不保证setter/getter的原语行,所以你可能会取到不完整的东西。因此,在多线程的环境下原子操作是非常必要的,否则有可能会引起错误的结果。

  • 比如setter函数里面改变两个成员变量,如果你用nonatomic的话,getter可能会取到只更改了其中一个变量时候的状态,这样取到的东西会有问题,就是不完整的。当然如果不需要多线程支持的话,用nonatomic就够了,因为不涉及到线程锁的操作,所以它执行率相对快些。

  • 下面是载录的网上一段加了atomic的例子:

  •   {lock}
                                    if (property != newValue) { 
                                            [property release]; 
                                            property = [newValue retain]; 
                                    }
                            {unlock}

  • 可以看出来,用atomic会在多线程的设值取值时加锁,中间的执行层是处于被保护的一种状态,atomic是oc使用的一种线程保护技术,基本上来讲,就是防止在写入未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。

iOS开发多线程篇---atomic nonatomic区别

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

iOS开发笔记--atomic与nonatomic,assign,copy与retain的定义和区别

atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。         atomic                 设置成员变量的@p...
  • errvv
  • errvv
  • 2016年01月25日 10:49
  • 151

MacOS和iOS开发中异步调用与多线程的区别

很多童鞋可能对Apple开发中的异步调用和多线程的区别不是太清楚,这里本猫将用一些简单的示例来展示一下它们到底直观上有神马不同. 首先异步调用可以在同一个线程中,也可以在多个不同的线程中.每个线程都...
  • mydo
  • mydo
  • 2016年07月18日 08:58
  • 1665

iOS atomic和nonatomic区别

atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。         atomic                 设置成员变量的@p...

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

atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。         atomic                 设置成员变量的@p...

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

atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。         atomic                 设置成员变量的@property...

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

nonatomic与atomic assign,copy与retain 这是OC中很基础但是必须掌握的知识点
  • LeoiOS
  • LeoiOS
  • 2014年11月29日 12:44
  • 203

iOS中 atomic、nonatomic、assign、copy、retain、readonly的定义与区别

atomic、nonatomic:atomic与nonatomic用来决定编译器生成的getter和setter是否为原子操作。 atomic:设置成员变量的@property属性时,默认为atom...
  • phxiang
  • phxiang
  • 2017年02月27日 15:57
  • 87

IOS基础之atomic与nonatomic,assign,copy与retain的定义和区别

atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。         atomic                 设置成员变量的@propert...
  • xdrt81y
  • xdrt81y
  • 2013年06月18日 11:34
  • 982

ios atomic nonatomic区别

atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。 atomic 设置成员变量的@property属性时,默认为atomic,提供多线程安全。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS开发多线程篇---atomic nonatomic区别
举报原因:
原因补充:

(最多只允许输入30个字)