美文网首页
第45条:使用dispatch_once来执行只需运行一次的线程

第45条:使用dispatch_once来执行只需运行一次的线程

作者: MrSYLong | 来源:发表于2018-10-14 21:58 被阅读12次

单例模式,常见实现方式为,在类中编写名为sharedInstance的方法,该方法只会返回全类共用的单例实例,而不会每次调用时都创建新的实例。

使用同步块:

@implementation EOCClass

+ (id)sharedInstance{
    static EOCClass *sharedInstance = nil;
    @synchronized(self){
        if(!sharedInstance){
            sharedInstance = [[self alloc] init];
        }
    }
    return sharedInstance;
}

@end

利用GCD特性,dispatch_once():

@implementation EOCClass

+ (id)sharedInstance{
    static EOCClass *sharedInstance = nil;
    // 每次调用都必须使用完全相同的标志,所以可以将标记声明在static或global作用域中
    static dispatch_once_t onceToken;
    // 只会执行一次
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];    
    });
    return sharedInstance;
}

@end

使用dispatch_once可以简化代码并且彻底保证线程安全,而且更加高效。

相关文章

网友评论

      本文标题:第45条:使用dispatch_once来执行只需运行一次的线程

      本文链接:https://www.haomeiwen.com/subject/vgntzftx.html