单例模式下的通用宏

Posted 爱上Xcode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式下的通用宏相关的知识,希望对你有一定的参考价值。

当我们需要定义多个单例时,如果每个单例都去书写一遍单例模式代码,其实也是很麻烦的一件事,毕竟代码基本是一样的,只不过可能命名不一样而已,而在编程中,通常一样的东西只写一次,所以我们需要对其进行抽取,方便我们的使用。

在项目中新建一个Header File文件,书写如下代码:

#define SingleH(name) +(instancetype)share##name;
//判断是否为ARC环境,是的话不执行下面的代码
#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;\

- (oneway void)release {\    \ }\ \ - (instancetype)retain {\    
   return _instance;\ }\ \ - (NSUInteger)retainCount {\    
   return
MAXFLOAT;\ }
#endif

这里需要注意的第一点是,动态赋予变量名的方法,比如我们在SingleM(name)后面的括号中的名称则表示我们赋予的名称,赋予的位置就是后面对应的##name

此时,我们可以将之前一篇推文中的Tool工具类进行修改,删除.h中之前我们书写的代码,修改为:

SingleH(Tool)

同样的,需要修改.m中的代码为:

SingleM(Tool)

好了,此时运行代码查看效果,发现和我们之前运行的一致,你也可以再新建几个类通过使用通用宏看是否可以达到我们想要的效果。

今日音乐推荐

当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放

以上是关于单例模式下的通用宏的主要内容,如果未能解决你的问题,请参考以下文章

C++11标准下的单例设计模式

iOS使用宏写单例

iOS使用宏写单例

单例模式在多线程下的多种实现模式

单例模式

单例模式:Qt本身就提供了专门的宏 Q_GLOBAL_STATIC 通过这个宏不但定义简单,还可以获得线程安全性