Cocoa dispatch_once每个实例

Pet*_*isu 6 cocoa objective-c ios

如何使用displatch_once,因此每个实例生命周期执行一次给定的代码

等价的是在对象中有一个属性,并像这样使用它

- (void)viewWillAppear:(..).. {

   ...

   if (self.isDisplatched == NO) {
      ...
      self.isDisplatched = YES;
   }

}
Run Code Online (Sandbox Code Playgroud)

但我不想使用额外的属性,而是dispatch_once_t或simmilar

Ste*_*her 6

您的要求无法满足.dispatch_once只能用于以前从未写过的内存,而且你无法用实例变量来保证这一点.Greg Parker 这么说,他就是那个知道的人.

相反,请使用问题中的代码,但将其包装在一个@synchronized块中.

如果您真的想避免添加实例变量,可以使用单独的单例来管理可变集.您必须使用它注册实例并在重新分配时删除它们.确保这个助手类只包含弱引用; 看到NSMapTableNSMapTableWeakMemory.