GCD使用(四)操作只执行一次

1。dispatch_once ( &dispatch_once_t , block )

e.g.

static dispatch_once_t onceToken;

void (^executedOnlyOnce)(void) = ^{  

    static NSUInteger numberOfEntries = 0;

    numberOfEntries++;

    NSLog(@"Executed %lu time(s)", (unsigned long)numberOfEntries);    

};

-(void)action{    

    dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);    

    dispatch_once(&onceToken, ^{

        dispatch_async(concurrentQueue,  executedOnlyOnce);

    });    

   

    dispatch_once(&onceToken, ^{

        dispatch_async(concurrentQueue, executedOnlyOnce); //executedOnlyOnce不执行

    });

}

2。单例的使用

@implementation MySingleton

+(instancetype) sharedInstance{

    static MySingleton *SharedInstance = nil;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        SharedInstance = [MySingleton new];  //保证只被实例化一次

    });

    return SharedInstance;

}

@end


postscript:

  id 和 instancetype 区别:对于类方法的返回类型,使用instancetype更合适,它能保证编译器正确推断方法的返回类型,但instancetype不能做参数

                         使用id时,本质上是不会作类型检查,对于alloc,init返回类本身类型时还是有用




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值