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

来源:互联网 发布:视频亮度调节软件 编辑:程序博客网 时间:2024/06/04 20:08

第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中的有此功能
阅读全文
0 0