您的位置:首页 > 移动开发 > Objective-C

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

2017-09-12 15:51 363 查看

第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中的有此功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息