atomic 与 nonatomic 的区别:
1、具备 atomic 特质的获取方法会通过锁定机制来确保其操作的原子性。也就是说,如果两个线程同时读写同一属性,那么不论何时,总能看到有效的属性值,若是不加锁的话(即使用 nonatomic),那么当其中的一个线程改变某属性时,另一个线程也会突然闯入,把尚未修改好的值都出来,发生这种情况时,线程读到的属性值可能不对。
2、在 iOS 开发中使用同步锁的开销较大,这会带来性能问题。一般情况下并不要求属性必须是 “原子” 的,因为这并不能保证 “线程安全”,若要实现 “线程安全” 的操作,还需要采用更为深层的锁定机制才行。在 iOS 开发中一般都会使用nonatomic 属性,在 macOS 开发中,使用 atomic 属性,通常都不会有性能瓶颈。