代码之家  ›  专栏  ›  技术社区  ›  Coocoo4Cocoa

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

  •  1
  • Coocoo4Cocoa  · 技术社区  · 16 年前

    在线程环境中使用 NSOperation 如果使用 nonatomic 如果要对属性进行子类化,则属性甚至是值得的 非手术治疗 ?

    如果你 defaultQueue 设为1,非原子的额外开销值吗?如果每个操作队列执行的线程超过1个,可能需要这样做吗?

    感谢您提供了一个更好地理解线程环境中此属性的解决方案。

    1 回复  |  直到 8 年前
        1
  •  5
  •   tjw    16 年前

    如果您有一个对象(或该对象的属性),可以保证它不会同时从多个线程访问,那么您可以通过使用非原子的方法避免原子访问该属性的潜在开销。在创建操作并在nsOperationQueue上排队的最简单情况下,每个nsOperation实例要么在调用线程中设置,要么在单个后台线程中运行;因此,在任何时候,只有一个线程可以访问它。

    非原子何时有用这一更普遍的问题部分取决于您是否在启用垃圾收集的情况下运行。根据目标C发布说明:

    默认情况下,对属性的访问是原子的。这在GC中对几乎所有东西来说都是微不足道的,在非GC中对除了对象和结构之外的所有东西来说也是微不足道的。特别是,在非GC条件下对保留对象的原子访问可能很昂贵。因此,可以使用非原子属性属性。