IOS-dispatch_once和@synchronized的单例区别
来源:互联网 发布:淘宝商品类目大全 编辑:程序博客网 时间:2024/06/05 05:03
dispatch_once和@synchronized的单例模式
我们在使用单例的时候往往会使用@synchronized,其实GCD也提供了一种方式。它的优点在于它使用block而非函数指针,这样代码更自然。
我们平时使用的初始化往往是这样的
+ (id)sharedInstance{ static Instance *obj = nil; @synchronized([Instance class]) { if(!obj) obj = [[Instance alloc] init]; } return obj;}
这样性能就不是很好,因为每次调用+ (id)sharedInstance函数都会付出取锁的代价。下面我们使用更加简洁的方式来实现:
+ (id)sharedInstance{ static dispatch_once_t pred; static Instance *obj = nil; dispatch_once(&pred, ^{ obj = [[Instance alloc] init]; }); return obj;}
这样的方法有很多优势,首先满足了线程安全问题,其次很好满足静态分析器要求。GCD可以确保以更快的方式完成这些检测,它可以保证block中的代码在任何线程通过dispatch_once调用之前被执行,但它不会强制每次调用这个函数都让代码进行同步控制。实际上,如果你去看这个函数所在的头文件,你会发现目前它的实现其实是一个宏,进行了内联的初始化测试,这意味着通常情况下,你不用付出函数调用的负载代价,并且会有更少的同步控制负载。
因此,以后我们使用单例模式的时候尽量使用GCD。
1 0
- IOS-dispatch_once和@synchronized的单例区别
- dispatch_once和@synchronized的单例模式
- iOS UI篇 - @synchronized与dispatch_once 创建单例
- iOS 的单例模式 dispatch_once
- iOS 创建单例的方法 dispatch_once
- iOS 使用 dispatch_once 创建线程安全的单例
- iOS中使用GCD的dispatch_once创建单例
- IOS开发之dispatch_once创建单例
- 【ios】利用dispatch_once创建单例
- IOS开发之dispatch_once创建单例
- IOS--dispatch_once 创建单例singletons
- iOS开发单例模式 dispatch_once
- iOS开发单例模式 dispatch_once
- IOS开发之dispatch_once创建单例
- IOS 运用dispatch_once 创建单例 MARK
- iOS开发单例模式 dispatch_once
- iOS开发单例模式 dispatch_once
- iOS开发 -- 利用dispatch_once创建单例
- 算法_动态规划_01背包问题(重量为浮点型)
- Memcached安装与配置
- zoj3872——Beauty of Array(数学)
- RxAndroid和Retrofit结合使用-网络调用和生命周期分析
- (第11讲)二分排序(折半插入排序法)
- IOS-dispatch_once和@synchronized的单例区别
- 苹果双系统安装教程,苹果笔记本如何装Win7(经典)
- Android的UEvent流程分析
- 生成二维码的简单示例
- Python 资源大全
- 图像亮度自适应调整
- IOS开发证书 钥匙串“此证书的签发者无效”解决方法
- 深入理解进程间通信(IPC)
- [UOJ#34]多项式乘法