NSOperation对象(线程环境)中的非原子属性,何时使用它?

Coo*_*coa 1 iphone multithreading cocoa-touch objective-c ios

我仍然在使用线程环境中工作NSOperation,我有兴趣了解如果使用nonatomic属性甚至是值得的,如果你是子类NSOperation

如果你defaultQueue的设置为1,那么非原子的额外开销值得吗?如果每个操作队列执行多个线程,可能需要它吗?

感谢您提供解决方案,以便更好地了解线程环境中的此属性.

tjw*_*tjw 5

如果您有一个对象(或该对象的属性),您可以保证它不会同时从多个线程访问,那么您可以通过使用非原子来避免对该属性进行原子访问的潜在开销.在最简单的情况下,创建一个操作并将其排入NSOperationQueue,每个NSOperation实例将在调用线程中设置或在单个后台线程中运行; 所以在任何时候,只有一个线程应该访问它.

非原子何时有用的更一般的问题部分取决于您是否在启用垃圾收集的情况下运行.根据Objective-C发行说明:

默认情况下,访问属性是原子的.对于几乎所有事情而言,这在GC下是微不足道的,并且除了对象和结构之外,在非GC下也是微不足道的.特别是在非GC条件下对保留对象的原子访问可能是昂贵的.因此,可以使用非原子属性属性.