iOS中单例的线程安全
2015-07-28 19:23
302 查看
在多线程中,单例的实现也要考虑线程安全问题。
1.通过GCD dispatch_once来实现:
而下面代码就不同了。
1.通过GCD dispatch_once来实现:
@property (nonatomic, strong) NSString *str;
- (NSString *)str { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ if (!_str) { _str = [[NSString alloc] init]; } }); return _str; }当然这是在ARC情况下,如果是MRC情况下str被释放了,那么再访问str时会应用崩溃,被释放的内存,野指针,因为dispatch_once确实只执行一次。
而下面代码就不同了。
- (NSString *)str { if (!_str) { @synchronized(self) { if (!_str) { _str = [[NSString alloc] init]; } } } return _str; }
相关文章推荐
- github优秀开源项目大全-iOS
- 苹果开发 笔记(53)使用Fiddler 调试
- iOS多线程之线程安全
- IOS- 内存中堆和栈的区别
- ios学习笔记-(oc基础-面向对象小系统)
- IOS-动画Animation
- 终于理解POST请求和批量获取数据
- IOS的ARC导致内存泄露的几种情况和具体解决方案
- iOS 之选择器(Selector)
- iOS 将崩溃Log日志重定向输出到文件中保存
- Xcode 配置文件 xcconfig 使用实践
- iOS中ARC内部原理
- iOS正则表达式(二)
- IOS:Warning: Attempt to dismiss from view controller <xxxxxxxxxController: 0x15bd67f0> while a prese
- iOS省市区字典封装
- IOS编程常用字体
- iOS事件机制(一)
- iOS- xib(nib) 的重用(在有些情况下有利于加快项目功能的实现)
- [iOS]调用layoutSubViews方法(有的时候为啥会调用2遍)
- iOS 应用程序的生命周期详解