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

来源:互联网 发布:网络直播间 编辑:程序博客网 时间:2024/05/29 15:07
单例模式,该方法只会返回全类共用的单例实例,不会每次调用都创建新的实例。
@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作用域中。
阅读全文
0 0
原创粉丝点击