写高质量OC代码52建议总结:45.使用dispatch_once来执行只需要运行一次的线程安全代码
2017-07-26 11:11
344 查看
单例模式,该方法只会返回全类共用的单例实例,不会每次调用都创建新的实例。
总结:
1.GCD提供的dispatch_once函数可以很容易实现单例。
2.标记声明在static或global作用域中。
@implementation EOCClass +(id)sharedInstance { static EOCClass *sharedInstance = nil; @synchronized(self) { if (!sharedInstance) { sharedInstance = [[self alloc] init]; } } return sharedInstance; } @endGCD引入了一项新特性,实现单例更为容易。
void dispatch_once(dispatch_once_t *token, dispatch_block_t block);这个函数保证块必定会执行,而且只执行一次。这个操作完全是线程安全的。
+(id)sharedInstance { static EOCCLass *sharedInstance = nil; stat icdispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[self alloc] init]; }); return sharedInstance; }dispatch_once可以简化代码,并且保证线程安全。每次调用都必须使用完全相同的标记dispatch_once_t,标记要证明成static。这个函数用“原子访问”查询标记,以判断代码是否已经执行过。后者比前者速度快一倍。
总结:
1.GCD提供的dispatch_once函数可以很容易实现单例。
2.标记声明在static或global作用域中。
相关文章推荐
- 写高质量OC代码52建议总结:44.通过Dispatch Group机制,根据系统资源状况来执行任务
- 写高质量OC代码52建议总结:46.不要使用dispatch_get_current_queue
- OC高效率52之使用dispatch_once来执行只需运行一次的线程安全代码
- 编写高质量OC代码52建议总结:18.尽量使用不可变对象
- 编写高质量OC代码52建议总结:19.使用清晰而协调的命名方式
- 写高质量OC代码52建议总结:43.掌握GCD及操作队列的使用时机
- 编写高质量OC代码52建议总结:27.使用“class-continuation 分类” 隐藏实现细节
- 写高质量OC代码52建议总结:49.对自定义其内存管理语义的collection使用无缝桥接
- iOS 单例模式 学习 "52个方法 第6章 45条 使用 dispath_once 来执行只需运行一次的线程安全代码"
- 写高质量OC代码52建议总结:32.编写“异常安全代码”时留意内存管理问题
- 写高质量OC代码52建议总结:39.用handler块降低代码分散程度
- 编写高质量OC代码52建议总结:25.总是为第三方类的分类名称加前缀
- 编写高质量OC代码52建议总结:13.用“方法调配技术”调试“黑盒方法”
- 编写高质量OC代码52建议总结:9.以“族类模式“隐藏实现细节
- 写高质量OC代码52建议总结:33.以弱引用避免保留环
- 写高质量OC代码52建议总结:30.以ARC简化引用计数
- 编写高质量OC代码52建议总结:21.理解Objective-C的错误模型
- 编写高质量OC代码52建议总结:10.关联对象
- 编写高质量OC代码52建议总结:26.不要在分类中设置属性
- 编写高质量OC代码52建议总结:20.为私有方法加前缀