你的位置:首页 > 操作系统

[操作系统]一句话实现OC单例模式


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

// .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)

搞定!