69 单例使用宏实现

来源:互联网 发布:mean it 编辑:程序博客网 时间:2024/05/22 12:08
1>判断是否是ARC环境:可以用宏判断是否为ARC环境#if __has_feature(objc_arc)// ARC#else// MRC#endif2>定义宏的时候字符串连接:// ## : 连接字符串和参数#define singleton_h(name) + (instancetype)shared##name;
1>在ARC和MRC环境下单例的宏实现:// ## : 连接字符串和参数#define singleton_h(name) + (instancetype)shared##name;#if __has_feature(objc_arc) // ARC#define singleton_m(name) \static id _instance; \+ (id)allocWithZone:(struct _NSZone *)zone \{ \    static dispatch_once_t onceToken; \    dispatch_once(&onceToken, ^{ \        _instance = [super allocWithZone:zone]; \    }); \    return _instance; \} \ \+ (instancetype)shared##name \{ \    static dispatch_once_t onceToken; \    dispatch_once(&onceToken, ^{ \        _instance = [[self alloc] init]; \    })    return _instance; \} \+ (id)copyWithZone:(struct _NSZone *)zone \{ \    return _instance; \}#else // 非ARC#define singleton_m(name) \static id _instance; \+ (id)allocWithZone:(struct _NSZone *)zone \{ \   static dispatch_once_t onceToken; \   dispatch_once(&onceToken, ^{ \    _instance = [super allocWithZone:zone]; \}); \    return _instance; \} \\+ (instancetype)shared##name \{ \    static dispatch_once_t onceToken; \    dispatch_once(&onceToken, ^{ \    _instance = [[self alloc] init]; \}); \    return _instance; \} \\- (oneway void)release \{ \\} \\- (id)autorelease \{ \    return _instance; \} \\- (id)retain \{ \    return _instance; \} \\- (NSUInteger)retainCount \{ \    return 1; \} \\+ (id)copyWithZone:(struct _NSZone *)zone \{ \    return _instance; \}#endif
0 0
原创粉丝点击