如何写单例
标签(空格分隔): 苹果书
这个东西面试老有人问你咋手写。
第一步 写.h暴露一个调用的方法
第二步 写.m在@implementation外面写一个static的对象的引用并指向null。写实现一般两种一种普通写法,这种GCD写法
用@synchronized,检测引用没有分配一个。返回有的写id, 有的写单例类*,有的写instancetype。建议用instancetype。
copyWithZone保证copy时候单例。有时候面试还会问线程安全吗。
方法一:
static Myclass _instance;
+(id)shareInstance{
@synchronized(self){
if(_instance == nil)
_instance = [MyClass alloc] init];
}
return _instance;
}
方法二:
+(id)shareInstance{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if(_instance == nil)
_instance = [MyClass alloc] init];
});
return _instance;
}
//保证copy时相同
-(id)copyWithZone:(NSZone *)zone{
return _instance;
}
网友评论