iOS之单例类两种实现
2015-12-04 14:21
405 查看
一 苹果官方文档的写法
static AccountManager *DefaultManager = nil; + (AccountManager *)defaultManager { if (!DefaultManager) DefaultManager = [[self allocWithZone:NULL] init]; return DefaultManager; }
二 iOS4之后的一种写法
+ (AccountManager *)sharedManager
{
static AccountManager *sharedAccountManagerInstance = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
sharedAccountManagerInstance = [[self alloc] init];
});
return sharedAccountManagerInstance;
}
该写法来自 objcolumnist,文中提到,该写法具有以下几个特性:
1. 线程安全。
2. 满足静态分析器的要求。
3. 兼容了ARC
题外知识
关于dispatch_once:
1.这个方法可以在创建单例或者某些初始化动作时使用,以保证其唯一性。2.该方法是线程安全的,所以请放心大胆的在子线程中使用。(前提是你的dispatch_once_t *predicate对象必须是全局或者静态对象。这一点很重要,如果不能保证这一点,也就不能保证该方法只会被执行一次。)
相关文章推荐
- iOS问题处理:如何在Mac下显示Finder中的所有文件
- iOS之单例类一
- DeBug调试输出
- iOS中获取当前时间
- IOS 图片上传旋转
- iOS项目更新之升级Xcode7 & iOS9
- iOS开发笔记
- iOS开发笔记--iOS 事件处理机制与图像渲染过程
- ios所有设备分辨率
- iOS 获取通讯录联系人信息
- 如何利用Pre.im分发iOS测试包
- IOS OC 字符串
- 本地通知 ios
- iOS性能优化之内存管理:Analyze、Leaks、Allocations的使用和案例代码
- IOS 数据存储(一)
- iOS通知的介绍
- iOS-调试技巧
- iOS 获取当前Wifi的 名称 SSID
- iOS常用手势识别器
- iOS常用手势识别器