具备atomic特质的获取方法会通过锁定机制来确保其操作的原子性。这也就是说,如果两个线程读写同一属性,那么不论何时,总能看到有效的属性值。若是不加锁的话(或者说使用nonatomic语义),那么当其中一个线程正在改写某属性值时,另外一个线程也许会突然闯入,坝上未修改好的属性值读取出来。发生这种情况时,线程读取到的属性值可能不对。
如果开发过iOS程序,你就会发现,其中所有属性都声明为nonatomic。这样做的历史原因是:在iOS中使用同步锁的开销较大,这会带来性能问题。一般情况下并不要求属性必须是“原子的”,因为这并不能保证“线程安全”(thread safety),若要实现“线程安全"的操作,还需要采用更为深层次的锁定机制才行。例如,一个线程在连续多次读取某属性值的过程中有别的线程在同事改写该值,那么即便将属性声明为atomic,也还是会读到不同的属性值。因此,开发iOS程序时一般都会使用nonatomic属性。
atomic和nonatomic的区别
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 我们声明属性的时候,必须要考虑到属性特质对编译器所产生的存取方法的影响。 下面我们就主要讲讲atomic 与 no...
- 前言 iOS开发中使用@property声明属性时,经常用到atomic与nonatomic两个关键字 atomi...
- 网上转载最多的一篇关于atomic的文章《ios atomic nonatomic区别》其中关于讲解atomic的...
- 一、atomic与nonatomic的区别! 首先,先介绍一下atomic和nonatomic 1.atomic使...