iOS 为什么属性声明为atomic依然不能保证线程安全?

请看评论正解。

一般我们在开发中,大部分属性的声明都会加上nonatomic,
以提高数据的读取效率。(即不使用同步锁)

那么为什么属性即使声明为atomic依然不能保证线程安全呢?

首先,先介绍一下nonatomic和atomic

  • nonatomic:不使用同步锁,非原子性
  • atomic:使用同步锁,原子性

属性声明为atomic时,
在该属性在调用getter和setter方法时,会加上同步锁,
即在属性在调用getter和setter方法时,保证同一时刻只能有一个线程调用属性的读/写方法。
保证了读和写的过程是可靠的。
但并不能保证数据一定是可靠的。

理由如下图:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容