代码如下,可直接拷贝到头文件中
#definesingleton_h(name) +(instancetype)shared##name#if__has_feature(objc_arc)//ARC#definesingleton_m(name) \staticid_instance;\+(id)allocWithZone:(struct_NSZone *)zone\
{\staticdispatch_once_t onceToken;\
dispatch_once(&onceToken, ^{\
_instance=[super allocWithZone:zone];\
});\return_instance;\
}\
\+(instancetype)shared##name\
{\staticdispatch_once_t onceToken;\
dispatch_once(&onceToken, ^{\
_instance=[[self alloc] init];\
});\return_instance;\
}\
\+(id)copyWithZone:(struct_NSZone *)zone\
{\return_instance;\
}#else//非ARC#definesingleton_m(name) \staticid_instance;\+(id)allocWithZone:(struct_NSZone *)zone\
{\staticdispatch_once_t onceToken;\
dispatch_once(&onceToken, ^{\
_instance=[super allocWithZone:zone];\
});\return_instance;\
}\
\+(instancetype)shared##name\
{\staticdispatch_once_t onceToken;\
dispatch_once(&onceToken, ^{\
_instance=[[self alloc] init];\
});\return_instance;\
}\
\+(id)copyWithZone:(struct_NSZone *)zone\
{\return_instance;\
}\-(onewayvoid)release\
{\
\
}\-(instancetype)autorelease\
{\return_instance;\
}\-(instancetype)retain\
{\return_instance;\
}\-(NSUInteger)retainCount\
{\return1;\
}#endif
MRC要重写四个方法:
-(oneway void)release
{
}
-(instancetype)autorelease
{
return self;
}
-(instancetype)retain{
return self;
}
-(NSUInteger)retainCount{
return 1;
}