您的位置:首页 > 编程语言

写高质量OC代码52建议总结:45.使用dispatch_once来执行只需要运行一次的线程安全代码

2017-07-26 11:11 344 查看
单例模式,该方法只会返回全类共用的单例实例,不会每次调用都创建新的实例。
@implementation EOCClass
+(id)sharedInstance {
static EOCClass *sharedInstance = nil;
@synchronized(self) {
if (!sharedInstance) {
sharedInstance = [[self alloc] init];
}
}
return sharedInstance;
}
@end
 GCD引入了一项新特性,实现单例更为容易。
void dispatch_once(dispatch_once_t *token, dispatch_block_t block);
 这个函数保证块必定会执行,而且只执行一次。这个操作完全是线程安全的。
+(id)sharedInstance {
static EOCCLass *sharedInstance = nil;
stat icdispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
 dispatch_once可以简化代码,并且保证线程安全。每次调用都必须使用完全相同的标记dispatch_once_t,标记要证明成static。这个函数用“原子访问”查询标记,以判断代码是否已经执行过。后者比前者速度快一倍。

 

 总结:

 1.GCD提供的dispatch_once函数可以很容易实现单例。

 2.标记声明在static或global作用域中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐