首页 > 学院 > 开发设计 > 正文

一句话实现OC单例模式

2019-11-14 18:43:21
字体:
来源:转载
供稿:网友

首先新建一个头文件,定义如下宏:

// .h文件的实现#define SingletonH(methodName) + (instancetype)shared##methodName;// .m文件的实现#if __has_feature(objc_arc) // 是ARC#define SingletonM(methodName) /static id _instace = nil; /+ (id)allocWithZone:(struct _NSZone *)zone /{ /if (_instace == nil) { /static dispatch_once_t onceToken; /dispatch_once(&onceToken, ^{ /_instace = [super allocWithZone:zone]; /}); /} /return _instace; /} //- (id)init /{ /static dispatch_once_t onceToken; /dispatch_once(&onceToken, ^{ /_instace = [super init]; /}); /return _instace; /} //+ (instancetype)shared##methodName /{ /return [[self alloc] init]; /} /+ (id)copyWithZone:(struct _NSZone *)zone /{ /return _instace; /} //+ (id)mutableCopyWithZone:(struct _NSZone *)zone /{ /return _instace; /}#else // 不是ARC#define SingletonM(methodName) /static id _instace = nil; /+ (id)allocWithZone:(struct _NSZone *)zone /{ /if (_instace == nil) { /static dispatch_once_t onceToken; /dispatch_once(&onceToken, ^{ /_instace = [super allocWithZone:zone]; /}); /} /return _instace; /} //- (id)init /{ /static dispatch_once_t onceToken; /dispatch_once(&onceToken, ^{ /_instace = [super init]; /}); /return _instace; /} //+ (instancetype)shared##methodName /{ /return [[self alloc] init]; /} //- (oneway void)release /{ //} //- (id)retain /{ /return self; /} //- (NSUInteger)retainCount /{ /return 1; /} /+ (id)copyWithZone:(struct _NSZone *)zone /{ /    return _instace; /} / /+ (id)mutableCopyWithZone:(struct _NSZone *)zone /{ /    return _instace; /}#endif

然后在你定义单例类的

.h 文件 写 SingletonH(MyMethodName) 

.m 文件写 SingletonM(MyMethodName)

搞定!

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表