atomic 和 nonatomic的区别

首先atomic 和 nonatomic 都不能保证线程的安全性;
atomic:
如果我们对属性 不设置atomic或者nonatomic . 那么默认是atomic. 也就是设置了这个属性的原子性. 设置后 这个属性的 setter 和 geter方法 在内部就会自动加一把锁. 保证 set 和 get 的安全.

其优点是: 保证了 set 和 get 的时候能得到一个完整的对象, 不至于 crash. 缺点就是会降低效率

nonatomic: 非原子性. 不保证 set 和 get 的时候能得到一个完整的对象. 效率高

如果我们使用nonatomic. 会有可能导致什么意外呢
比如 对 test 属性进行操作. 有 A 的线程 进行一个读取操作. 同时有一个 B 线程对 test 进行一个写入操作. 那么就有可能发生 B 将 test realse 之后, 导致 A 的读取操作出现异常情况, 进而 crash.

加入atomic 可以防止上面情况的发生.
但是同样保证不了线程安全.

比如 卖票问题: 可参考我的 卖票问题

所以要保证线程安全,得使用锁, 或者其他同步的方法来实现.

你可能感兴趣的:(atomic 和 nonatomic的区别)