iOS之《Effective Objective-C 2.0》读书笔记(45)

2017-09-12 19:34:32来源:CSDN作者:yuhuashimyy人点击

分享

第45条:使用dispatch_once来执行只需运行一次的线程安全代码

1.如果在一个项目中,某段代码只需要运行一次,则:

static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{    // 只需要运行一次});

2.单例的书写也使用到了dispatch_once

  • 使用GCD的优点:可以简化代码并且彻底保证线程安全,开发者根本无须担心加锁或同步
+ (instancetype)sharedInstance{    static EOCClass *sharedInstance = nil;    @synchronized (self) {        if (!sharedInstance) {            sharedInstance = [[self alloc] init];        }    }    return sharedInstance;}
  • 不使用GCD:
+ (instancetype)sharedInstance{    static EOCClass *sharedInstance = nil;    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        sharedInstance = [[self alloc] init];    });    return sharedInstance;}

3.还需要明确的是:

Swift中的GCD没有这个功能,OC中的有此功能

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台