iOs开发 单例模式 省懒宏
#define singleton_h(name) + (instancetype)shared##name; #if __has_feature(obj_arc) #define singleton_m(name)\ static id _instance;\ + (instancetype)shared##name\ {\ static dispatch_once_t onceToken;\ dispatch_once(&onceToken, ^{\ _instance = [[self alloc] init];\ });\ return _instance;\ }\ + (id)allocWithZone:(struct _NSZone *)zone\ {\ static dispatch_once_t onceToken;\ dispatch_once(&onceToken, ^{\ _instance = [super allocWithZone:zone];\ });\ return _instance;\ }\ + (id)copyWithZone:(struct _NSZone *)zone\ {\ return _instance;\ } #else #define singleton_m(name)\ static id _instance;\ + (instancetype)shared##name\ {\ static dispatch_once_t onceToken;\ dispatch_once(&onceToken, ^{\ _instance = [[self alloc] init];\ });\ return _instance;\ }\ + (id)allocWithZone:(struct _NSZone *)zone\ {\ static dispatch_once_t onceToken;\ dispatch_once(&onceToken, ^{\ _instance = [super allocWithZone:zone];\ });\ return _instance;\ }\ + (id)copyWithZone:(struct _NSZone *)zone\ {\ return _instance;\ }\ \ - (oneway void)release\ {\ }\ - (id)autorelease\ {\ return _instance;\ }\ - (id)retain\ {\ return _instance;\ }\ - (NSUInteger)retainCount\ {\ return 1;\ } #endif