iOS中使用dispatch_once实现单例及注意事项
来源:互联网 发布:多益网络待遇五险一金 编辑:程序博客网 时间:2024/05/16 06:15
单例模式实现方式是在类中编写名为sharedInstance的方法,该方法只会返回全类共用的单例实例,而不会在每次调用时都创建新的实例。
使用同步块实现:
+ (id)sharedInstance {
staticClassName *sharedInstance =nil;
@synchronized (self) {
if (!sharedInstance) {
sharedInstance = [[self alloc]init];
}
}
return sharedInstance;
}
GCD引入了一个新特征,更为方便:
+ (instancetype)sharedInstance {
static ClassName *sharedInstance =nil;
staticdispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[selfalloc]init];
});
return sharedInstance;
}
使用dispatch_once的注意事项:
此函数接收类型为dispatch_once_t的特殊参数,还有一个块参数。对于onceToken标记,该函数保证相关的块必定会执行,且执行一次。此操作完全是线程安全的。注意:对于只执行一次的块来说,对于传入函数的标记参数必须完全相同,因此,开发时需要将标记变量声明在static或global作用于中。
对于在dispatch_once中的创建的实例对象必须确保其只有一个,所以使用static修饰
上述两种实现单例的方法比较:使用dispatch_once可以简化代码且保证线程安全,开发者无需担心加锁或同步。所有问题都在GCD底层处理。此外,dispatch_once更高效。它没有使用重量级的同步机制。使用同步机制,每次运行代码都需要获取锁。dispatch_once采用“原子访问”来查询标记,判断代码是否执行过。
- iOS中使用dispatch_once实现单例及注意事项
- 使用dispatch_once实现单例
- iOS中使用GCD的dispatch_once创建单例
- 使用dispatch_once实现单例模式
- 使用dispatch_once实现单例模式
- dispatch_once 实现单例
- dispatch_once 实现单例
- dispatch_once 实现单例
- 使用GCD中dispatch_once创建单例
- IOS基础学习日志(七)利用dispatch_once创建单例及使用
- iOS 使用 dispatch_once 创建线程安全的单例
- 使用dispatch_once创建单例
- IOS开发之dispatch_once创建单例
- 【ios】利用dispatch_once创建单例
- IOS开发之dispatch_once创建单例
- IOS--dispatch_once 创建单例singletons
- iOS开发单例模式 dispatch_once
- iOS开发单例模式 dispatch_once
- JSP页面访问SQLServer数据库
- hexo 搭建
- cocos Lua 计算中英文字符串长度封装接口
- 欢迎使用CSDN-markdown编辑器
- Dubbo多协议和多注册中心
- iOS中使用dispatch_once实现单例及注意事项
- 2016.9.3
- 怎样提取中文的开头字母(会提取每一个中文字的开头字母哟)
- 初学安卓路之初识Notification(通知)
- Android对数据库的基本操作
- [C++]Swap 整数交换;指针
- [Pa2013]Karty 解题报告
- leetcode 29. Divide Two Integers
- HDU:1312 Red and Black