多线程下的单例方法实现规范
下面两种实现方式任选其一,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;
}
网友评论