iOS之单例类两种实现
来源:互联网 发布:java加载类的过程 编辑:程序博客网 时间:2024/06/06 05:42
一 苹果官方文档的写法
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对象必须是全局或者静态对象。这一点很重要,如果不能保证这一点,也就不能保证该方法只会被执行一次。)
0 0
- iOS之单例类两种实现
- iOS之实现HelloWord
- IOS之rpc实现
- IOS之计算器实现
- iOS之Protocol的实现
- ios开发之倒计时实现
- iOS动画之UIView实现
- iOS之实现倒计时功能
- iOS开发之widget实现
- ios 开发之widget实现
- IOS之UITableView划动删除的实现
- IOS之tableview 实现动态加载图片
- iOS开发之摇一摇功能的实现
- iOS 之拨号功能的实现
- iOS 之拨号功能的实现
- IOS之Sqlite3的简单实现
- iOS数据库之查找功能的实现
- 【IOS功能实现】之:下拉列表
- U3D打图集流程
- LayoutInflater加载布局
- android典型代码系列(二十)------多线程下载、断点续传
- log4j日志配置详解
- Swift! Swift! Swift! 重要的事情说3遍!
- iOS之单例类两种实现
- iOS des加解密 base64输出
- Linux进程实时IO监控iotop命令
- lombok的使用和原理
- 16.4 一个 DIB 位图库的实现
- LeetCode(304)Range Sum Query 2D - Immutable
- 归并排序与分治算法详解
- PHP中date函数月和日带0问题
- 文本框的常用编辑操作