dispatch_once 只执行一次的方法

来源:互联网 发布:淘宝卖家怎么进入 编辑:程序博客网 时间:2024/06/03 22:35






单例实现方式很方便,一句话:
   static dispatch_once_t oncePredicate;
    dispatch_once(&oncePredicate, ^{
//这个block 只执行一次   
    });






如果想一个方法只执行一次就可以这样用。“开关量”    是(  static dispatch_once_t oncePredicate)显然这个类只能执行一次方法,类的一个实例执行了,其他的实例就不能执行了。


这样修改可以让每个实例都能执行一次:“Since most applications declare this variable as a static global, the documentation covers this pattern. If you have a token which is unique for each class instance and starts out properly zero-initialized, then it will execute for each instance.”


参考:http://stackoverflow.com/questions/8464599/dispatch-once-in-super-class






还是要手动设置开关量——要提前添加成员变量。
class

   dispatch_once_t oncePredicate;//初始化付值  oncePredicate =0





    dispatch_once(&oncePredicate, ^{
//这个block  针对每个实例只执行一次!
    });
















static 变量可以随时添加,成员变量却不行
BOOL class_addIvar(Class cls, const char *name, size_t size, uint8_t alignment, const char *types)


参考;RunTime Reference    https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html#//apple_ref/c/func/class_addIvar




0 0