我读了这个问题(以及其他几个问题):
我完全理解(至少我希望如此 :-D)属性的原子/非原子说明符是如何工作的:
Atomic 保证“读”操作不会被“写”操作中断。Nonatomic 不保证这一点。
原子和非原子都不能解决竞争条件,即一个线程正在读取,两个线程正在写入。无法预测读取操作将返回什么结果。这需要通过额外的同步来解决。
原子和非原子都不能保证整体数据完整性;一个线程可以设置一个属性,而另一个线程将第二个属性设置为与第一个属性的状态不一致的状态。这也需要通过额外的同步来解决。
让我挑眉的是,人们分为两个阵营:
nonatomic
Pro atomic:仅用于性能优化是有意义的。
如果您不进行优化,那么由于第 1 点,您应该始终使用 atomic。这样,在多线程应用程序中读取此属性时,您不会得到一些完全的废话。当然,如果您关心第 2 点和第 3 点,则需要在其之上添加更多同步。
反对原子:使用原子根本没有意义。
由于 atomic 并不能解决多线程应用程序中的所有问题,因此使用它根本没有意义,因为无论如何您都需要在其之上添加更多同步代码。它只会让事情变慢。
我倾向于亲原子阵营,但我想做一个健全的检查,我没有错过任何东西。