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
- 69 单例使用宏实现
- 使用宏来实现单例模式
- 使用单枚举类型实现单例
- 使用枚举实现单例
- 使用dispatch_once实现单例
- 使用单元素枚举类实现单例模式
- C++ 使用模板 实现单例模式
- 使用单例模式实现mysql类
- 使用dispatch_once实现单例模式
- 使用缓存来模拟实现单例
- 使用枚举来实现单例模式
- js 使用闭包实现单例
- 使用dispatch_once实现单例模式
- C++ 使用模板实现单例模式
- 单例的实现与使用
- 单例的实现、使用与架构
- 单例--使用枚举类型实现
- 使用枚举实现绝对单例
- 关于View的ScrollTo, getScrollX 和 getScrollY
- 68 MRC单例实现
- 程序媛开发之路—字符
- GitHub优秀的 Android 开源项目整理-经典版
- org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update
- 69 单例使用宏实现
- zoj 3362 Beer Problem 【最大费用最大流 需要判断最长路值是否为负】
- NFS server权限设置问题
- 助力开发团队
- OpenGL-vs2012-glfw-glew 测试环境搭建
- 新的征程
- 8.27总结
- 领英的kafka安装和配置
- Class.getResource和ClassLoader.getResource区别与分析