多线程下的单例方法实现规范

多线程下的单例方法实现规范

下面两种实现方式任选其一,GCD效率更高。

// 使用synchronized指令防止线程冲突(创建出多个单例对象)
+ (instancetype)sharedSingleton
{
    static RAPClass *singleObj = nil;
    /**
     对self/类对象加mutex锁
     */
    @synchronized(self) {
        if (!singleObj) {
            singleObj = [[RAPClass alloc] init];
        }
    }
    
    return singleObj;
}

// 使用GCD防止线程冲突
+ (instancetype)defaultSingleton
{
    static RAPClass *singleObj = nil;
    
    static dispatch_once_t onceToken;
    /**
     GCD的这个方法确保block中的代码只执行一次;
     且当多个线程同时执行这个函数时,其会同步执行顺序直到block第一次被执行完毕。
     */
    dispatch_once(&onceToken, ^{
        singleObj = [[RAPClass alloc] init];
    });
    
    return singleObj;
}

你可能感兴趣的:(多线程下的单例方法实现规范)