一般我们在开发中,大部分属性的声明都会加上nonatomic,
以提高数据的读取效率。(即不使用同步锁)
那么为什么属性即使声明为atomic依然不能保证线程安全呢?
首先,先介绍一下nonatomic和atomic
- nonatomic:不使用同步锁,非原子性
- atomic:使用同步锁,原子性
属性声明为atomic时,
在该属性在调用getter和setter方法时,会加上同步锁,
即在属性在调用getter和setter方法时,保证同一时刻只能有一个线程调用属性的读/写方法。
保证了读和写的过程是可靠的。
但并不能保证数据一定是可靠的。
理由如下图:

网友评论
其实只是保证了setter和getter是线程安全而已。
如果举这个例子:
@property(atomic,strong) NSArray *list;
for (id x in list) {
}
用来说明这种枚举方法并不线程安全,就比较好理解了。