『导言』
亲们!有木有遇到这种情况:在iOS开发中多处用到单例模式,比如:多处处理网络请求况下,这时候难道不停地写单例模式?其实呀,有更好办法,建立一个宏文件,只要拖入工程,任何情况下套用都行!
一 、单例宏文件代码如下:单例宏Sing.h下载
#define SingleH(name) +(instancetype )share##name;
//条件满足ARC
# if __has_feature(objc_arc)
//否则执行MAC ##表示拼接 条件编译if不能放入宏define,所以先条件编译大与宏范围。
#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
#pragma mark - MRC
#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; \
} \
-(oneway void)release \
{ \
\
} \
-(instancetype)retain \
{ \
\
return _instance; \
} \
-(NSUInteger)retainCount \
{ \
return MAXFLOAT; \
}//不能加\ 如果加表示endif 为MRC其中的一部风
# endif
二、如何套用?demo下载
1.0 将宏下载下来,拖入xcode工程中.
2.0 比如:建立一个继承NSObject的ZWJTool.h ZWJTool.m
文件
3.0 加入头文件 #import "Single.h"
4.0 在.h文件引用SingleH(ZWJTool)
5.0 在.m文件引用SingleM(ZWJTool)
6.0 在需要地方调用: ZWJTool *tool = [ZWJTool shareZWJTool];
网友评论