使用dispatch_once实现单例
来源:互联网 发布:松山五小网络办公平台 编辑:程序博客网 时间:2024/05/16 01:46
很多人实现单例会这样写:
@implementation XXClass+ (id)sharedInstance { static XXClass *sharedInstance = nil; @synchronized(self) { if (!sharedInstance) { sharedInstance = [[self alloc] init]; } } return sharedInstance;}
相比之下:
@implementation XXClass+ (id)sharedInstance { static XXClass *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[self alloc] init]; }); return sharedInstance;}
使用dispatch_once可以简化代码并且彻底保证线程安全,开发者无需担心加锁或同步。此外,dispatch_once更高效,它没有使用重量级的同步机制,若是那样做的话,每次运行代码前都要获取锁。相反,此函数采用“原子访问”来查询标记,以判断其所对应的代码原来是否已经执行过。在64位Mac OS X上测试,后者的执行速度要比前者快一倍。
阅读全文
0 0
- 使用dispatch_once实现单例
- 使用dispatch_once实现单例模式
- 使用dispatch_once实现单例模式
- dispatch_once 实现单例
- dispatch_once 实现单例
- dispatch_once 实现单例
- 使用dispatch_once创建单例
- iOS中使用dispatch_once实现单例及注意事项
- [Objective-C] 用 dispatch_once 实现单例
- 用dispatch_once实现单例模式
- GCD---dispatch_once实现单例模式
- 使用GCD的dispatch_once创建单例
- 使用GCD的dispatch_once创建单例
- 使用dispatch_once单例进行项目开发
- 使用GCD中dispatch_once创建单例
- dispatch_once创建单例
- dispatch_once创建单例
- dispatch_once创建单例
- web前端第六天
- 求出0~999之间的所有“水仙花数”并输出。
- 整数字符串转换
- PHP 协程
- 使用内省机制实现Map与Bean之间的转换
- 使用dispatch_once实现单例
- 类别和扩展
- 自定义密码输入框和安全键盘
- javaagent
- Java对象的创建
- Linux下编译boost动态链接库和静态链接库
- Mysql修改数据库名方法
- 常见的GIT库 操作命令
- 汇编语言基础1