#define singleH(name) +(instancetype)share##name;
#if __has_feature(objc_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
#define singleM static id _instance;\
+(
instancetype)allocWithZone:(
struct _NSZone *)zone\
{\
static
dispatch_once_t onceToken;\
dispatch_once(&onceToken, ^{\
_instance = [
super allocWithZone:zone];\
});\
return _instance;\
}\
\
+(
instancetype)shareTools\
{\
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
这时我们就可以一劳永逸,任何项目中,当我们要使用单例类的时候只要在项目中导入PCH文件然后
在.h文件中调用singleH(类名)
在.m文件中调用singleM(类名)
创建类时直接调用share类名
方法即可。
作者:xx_cc
链接:https://www.jianshu.com/p/4867dc92337e
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。