refs:
http://blog.sina.com.cn/s/blog_5fde608901019ocr.html
对于_dispatch_once函数,只调用一次,常用于单例的创建:
+(SVProgressHUD*)sharedView{
}
dispatch_once_t变量只是标识_dispatch_once的执行情况,当once已经被使用时,dispatch_once方法将不执行内容;
因为once和sharedView都是静态的,故sharedView方法每次被执行时始终保持上一次结果,故实现单例效果。
使用Objective-C实现单例模式的最佳方式向来有很多争论,开发者(包括Apple在内)似乎每几年就会改变他们的想法。当Apple引入了GrandCentral Dispatch (GCD)(Mac OS10.6和iOS4.0),他们也引入了一个很适合用于实现单例模式的函数。
void dispatch_once( dispatch_once_t *predicate, dispatch_block_tblock);
dispatch_once不仅意味着代码仅会被运行一次,而且还是线程安全的,这就意味着你不需要使用诸如
@synchronized之类的来防止使用多个线程或者队列时不同步的问题。
如果被多个线程调用,该函数会同步等等直至代码块完成。
+ (AccountManager *)sharedManager {
staticAccountManager *sharedAccountManagerInst ance =nil;
staticdispatch_once_t predicate;dispatch_once(&predicate,^{
sharedAccountManagerInst ance = [[self alloc]init];
});
returnsharedAccountManagerInst ance;
}
AccountManager *accountManager = [AccountManagersharedManager];
AccountManager *accountManager = [[AccountManager alloc]init];