首页 > 代码库 > iOs开发 单例模式 省懒宏

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