iOS 单例通用宏(备忘)

2017-03-02  本文已影响2人  折颜乀

#define SingleH(name) +(instancetype)share##name;

#if __has_feature(objc_arc)

//条件满足ARC

#define SingleM(name) static id _instance;\

+(instancetype)allocWithZone:(struct _NSZone *)zone\

{\

static dispatch_once_t onceToken;\

dispatch_once(&onceToken, ^{\

_instance = [super allocWithZone:zone];\

});\

\

return _instance;\

}\

\

+(instancetype)share##name\

{\

return [[self alloc]init];\

}\

\

-(id)copyWithZone:(NSZone *)zone\

{\

return _instance;\

}\

\

-(id)mutableCopyWithZone:(NSZone *)zone\

{\

return _instance;\

}

#else

//MRC

#define SingleM(name) static id _instance;\

+(instancetype)allocWithZone:(struct _NSZone *)zone\

{\

static dispatch_once_t onceToken;\

dispatch_once(&onceToken, ^{\

_instance = [super allocWithZone:zone];\

});\

\

return _instance;\

}\

\

+(instancetype)share##name\

{\

return [[self alloc]init];\

}\

\

-(id)copyWithZone:(NSZone *)zone\

{\

return _instance;\

}\

\

-(id)mutableCopyWithZone:(NSZone *)zone\

{\

return _instance;\

}\

-(oneway void)release\

{\

}\

\

-(instancetype)retain\

{\

return _instance;\

}\

\

-(NSUInteger)retainCount\

{\

return MAXFLOAT;\

}

#endif

.H文件  使用  

SingleH(name)

.M文件使用

SingleM(name)

上一篇下一篇

猜你喜欢

热点阅读