什么时候使用@atomic?

Tor*_*oru 3 objective-c ios

我已经看到了这个问题:
原子和非原子属性之间有什么区别?

我明白这@atomic不保证线程安全,我必须使用其他机制(例如@synchronized)来实现.在此基础上,我不知道还确切地时使用@atomic的属性.我想知道用例使用的@atomic孤独.

Rob*_*Rob 5

atomic属性的典型用例是在跨多个线程处理原始数据类型时.例如,假设您有一些后台线程正在进行一些处理,并且您有一些BOOL状态属性,例如isProcessComplete,您的主线程想要检查后台进程是否完成:

if (self.isProcessComplete) {
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,声明此属性atomic允许我们跨多个线程使用/更新此属性,而不需要任何更复杂的同步机制,因为:

  • 我们正在处理一个标量的原始数据类型,例如BOOL;
  • 我们宣称它是atomic; 和
  • 我们使用访问器方法(例如self.)而不是直接访问ivar.

处理对象或其他更复杂的情况时,atomic通常是不够的.正如您所指出的,在实践中atomic,单独使用很少能够实现线程安全,这就是我们不经常使用它的原因.但是对于简单的,独立的原始数据类型,atomic可以是确保跨多个线程安全访问的简单方法.