典型的单例写法
//可能被多线程同时创建
static id sharedMyManager;
+(id)sharedThemeManager{
if(sharedMyManager==nil){
sharedMyManager = [[self alloc] init];
}
return sharedMyManager;
}
//加锁的写法,可以避免上述问题
+(id)sharedThemeManager{
@sychronized(self){
if(sharedMyManager==nil){
sharedMyManager = [[self alloc] init];
}
}
return sharedMyManager;
}
//第一次实例化创建Lock free
+(void) initialize{
static BOOL initialized = NO;
if(initialized == NO){
initialized = YES;
sharedMyManager = [[self alloc] init];
}
}
//GCD写法
+(id)sharedManager{
static dispatch_once_t once;
//保证blocks只能执行一次
dispatch_once(&once,^{
sharedMyManager = [[selft alloc] init];
});
return sharedMyManger;
}
//可能被多线程同时创建
static id sharedMyManager;
+(id)sharedThemeManager{
if(sharedMyManager==nil){
sharedMyManager = [[self alloc] init];
}
return sharedMyManager;
}
//加锁的写法,可以避免上述问题
+(id)sharedThemeManager{
@sychronized(self){
if(sharedMyManager==nil){
sharedMyManager = [[self alloc] init];
}
}
return sharedMyManager;
}
//第一次实例化创建Lock free
+(void) initialize{
static BOOL initialized = NO;
if(initialized == NO){
initialized = YES;
sharedMyManager = [[self alloc] init];
}
}
//GCD写法
+(id)sharedManager{
static dispatch_once_t once;
//保证blocks只能执行一次
dispatch_once(&once,^{
sharedMyManager = [[selft alloc] init];
});
return sharedMyManger;
}
本文详细介绍了单例模式的基本概念及其在多线程环境下的实现方式,包括普通写法、加锁写法、GCD写法,并深入分析了每种方法的优缺点和实现原理。
12

被折叠的 条评论
为什么被折叠?



