当前位置: 代码迷 >> Iphone >> ARC跟MRC实现单例模式
  详细解决方案

ARC跟MRC实现单例模式

热度:146   发布时间:2016-04-25 05:35:35.0
ARC和MRC实现单例模式

代码如下,可直接拷贝到头文件中

#define singleton_h(name) +(instancetype)shared##name# if __has_feature(objc_arc) //ARC#define singleton_m(name) \static id _instance;\+(id)allocWithZone:(struct _NSZone *)zone\{\    static dispatch_once_t onceToken;\    dispatch_once(&onceToken, ^{\        _instance = [super allocWithZone:zone];\    });\    return _instance;\}\\+(instancetype)shared##name\{\    static dispatch_once_t onceToken;\    dispatch_once(&onceToken, ^{\        _instance = [[self alloc] init];\    });\    return _instance;\}\\+(id)copyWithZone:(struct _NSZone *)zone\{\    return _instance;\}#else //非ARC#define singleton_m(name) \static id _instance;\+(id)allocWithZone:(struct _NSZone *)zone\{\static dispatch_once_t onceToken;\dispatch_once(&onceToken, ^{\_instance = [super allocWithZone:zone];\});\return _instance;\}\\+(instancetype)shared##name\{\static dispatch_once_t onceToken;\dispatch_once(&onceToken, ^{\_instance = [[self alloc] init];\});\return _instance;\}\\+(id)copyWithZone:(struct _NSZone *)zone\{\return _instance;\}\-(oneway void)release\{\    \}\-(instancetype)autorelease\{\    return _instance;\}\-(instancetype)retain\{\    return _instance;\}\-(NSUInteger)retainCount\{\    return 1;\}#endif

MRC要重写四个方法:

-(oneway void)release

{   

}

-(instancetype)autorelease

{

    return self;

}

-(instancetype)retain{

    

    return self;

}

-(NSUInteger)retainCount{

    return 1;

}

  相关解决方案