zhuliushijie的专栏

由java转入IOS开发了,自学配合实际项目记录一些项目中用到的技巧,APP比较小,,涉及到的知识点比较简单,大牛就不用看了,小兵大家一起讨论。单例模式就是确保在程序运行过程中,一个类只有一个实例,公司的APP的账号管理是通过单例实现的。先上代码:

@interface JVAccountManager : NSObject + (JVAccountManager *)sharedAccount; @end

@implementation JVAccountManager + (JVAccountManager *)sharedAccount { static JVAccountManager *sharedAccountManager; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedAccountManager = [[JVAccountManager alloc] init]; }); return sharedAccountManager; } @end

这是我们公司的实现方法,网上可以查到其他实现方法,但是要重写一些方法保证实例的唯一性,比如allocWithZone,copyWithZone,这里不赘述,我贴出来的是代码最简洁的实现方法; 比较陌生的是dispatch_once这个方法,这个方法其实就是为了保证实例的唯一性。这个方法是display_once,GCD(Grand Central Dispatch)中提供的方法,根据IOS编程这本书里面的解释,是一种低级的对NSOperation和NSOperationQueue的模拟,使用Objective-C block。其实我不是很清楚这一块,以后的文章中再分析吧。需要明白的是dispach_once函数中的代码块只会被执行一次,而且还是线程安全的。 void dispatch_once( dispatch_once_t *predicate, dispatch_block_t block);其中第一个参数predicate,该参数是检查后面第二个参数所代表的代码块是否被调用的谓词,第二个参数则是在整个应用程序中只会被调用一次的代码块;

在这个程序中获取这个唯一实例的方法:JVAccountManager *sharedAccountManager = [JVAccountManager sharedAccount];

我无所事事的度过了今天,是昨天死去的人们所期望的明天。

zhuliushijie的专栏

相关文章:

你感兴趣的文章:

标签云: