第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;
}
+ (instancetype)sharedInstance
{
static EOCClass *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
3.还需要明确的是:
Swift中的GCD没有这个功能,OC中的有此功能