ARC和MRC实现单例模式

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

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

#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;

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航