单例模式下的通用宏
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)
好了,此时运行代码查看效果,发现和我们之前运行的一致,你也可以再新建几个类通过使用通用宏看是否可以达到我们想要的效果。
今日音乐推荐
以上是关于单例模式下的通用宏的主要内容,如果未能解决你的问题,请参考以下文章