IOS开发之dispatch_once创建单例
来源:互联网 发布:淘宝买正规保健品 编辑:程序博客网 时间:2024/05/29 13:59
单例是一种类,该类只能在第一次用的时候实例化一个对象,后期直接调用此对象(有点共享的意思)。在Foundation框架中比如NSFileManger和NSNotificationCenter,分别通过它们的类方法defaultManager和defaultCenter获取。尽管不是严格意义的单例,这些类方法返回一个可以在应用的所有代码中访问到的类的共享实例。使用Objective-C实现单例模式的最佳方式向来有很多争论,开发者似乎每几年就会改变他们的想法。他们也引入了一个很适合用于实现单例模式的函数。
该函数就是dispatch_once:
void dispatch_once( dispatch_once_t *predicate, dispatch_block_t block);
该函数接收一个dispatch_once用于检查该代码块是否已经被调度的谓词(是一个长整型,实际上作为BOOL使用)。它还接收一个希望在应用的生命周期内仅被调度一次的代码块,对于本例就用于shared实例的实例化。
dispatch_once不仅意味着代码仅会被运行一次,而且还是线程安全的,这就意味着你不需要使用诸如@synchronized之类的来防止使用多个线程或者队列时不同步的问题。
如果被多个线程调用,该函数会同步等等直至代码块完成。
实际要如何使用这些呢?
好吧,假设有一个AccountManager类,你想在整个应用中访问该类的共享实例。你可以按如下代码简单实现一个类方法:
+ (AccountManager *)sharedManager {
static AccountManager *sharedAccountManagerInstance = nil;
static dispatch_once_t predicate;dispatch_once(&predicate, ^{
sharedAccountManagerInstance = [[self alloc] init];
});
return sharedAccountManagerInstance;
}
这就意味着你任何时候访问共享实例,需要做的仅是:
AccountManager *accountManager = [AccountManager sharedManager];
就这些,你现在在应用中就有一个共享的实例,该实例只会被创建一次。
该方法有很多优势:
1 线程安全
2 很好满足静态分析器要求
3 和自动引用计数(ARC)兼容
4 仅需要少量代码
该方法的劣势就是它仍然运行创建一个非共享的实例:
AccountManager *accountManager = [[AccountManager alloc] init];
有些时候你希望有这种行为,但如果正在想要的是仅一个实例被实例化就需要注意这点。
0 0
- IOS开发之dispatch_once创建单例
- IOS开发之dispatch_once创建单例
- IOS开发之dispatch_once创建单例
- iOS开发 -- 利用dispatch_once创建单例
- 【iOS开发】利用dispatch_once创建单例
- iOS 开发-利用dispatch_once创建单例
- 【ios】利用dispatch_once创建单例
- IOS--dispatch_once 创建单例singletons
- IOS 运用dispatch_once 创建单例 MARK
- iOS 创建单例的方法 dispatch_once
- <iOS>利用dispatch_once创建单例
- iOS开发单例模式 dispatch_once
- iOS开发单例模式 dispatch_once
- iOS开发单例模式 dispatch_once
- iOS开发单例模式 dispatch_once
- dispatch_once创建单例
- dispatch_once创建单例
- dispatch_once创建单例
- android ListView几个比较特别的属性
- js实现数据库与网页之间的换行互转
- ORACLE的Copy命令和create table,insert into的比较
- java 注册表工具类
- typedef
- IOS开发之dispatch_once创建单例
- CentOS 5.5下Tomcat的安装
- Flash动画制作的基本步骤
- java_io.TransForm
- 在 Eclipse 上开发 Python - PyDev 插件安装教程
- (转载)嵌入式Linux内核I2C子系统详解
- zoj1013
- Oracle 创建临时表
- 你是什么样的人,你就会有什么样的团队