如何写单例

如何写单例

标签(空格分隔): 苹果书


这个东西面试老有人问你咋手写。
第一步 写.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;  
}

你可能感兴趣的:(如何写单例)