GCD之用dispatch_once创建单例
单例模式是开发者常用的一种设置模式,常见的实现方式为:在类中编写名为 sharedInstance的方法,该方法只会返回全类共用的单例实例,而不会在每次调用时创建新的实例. 常见的做法是: + (instancetype)sharedUser { static User *_sharedInstance = nil; @synchronized(self) { if (!_sharedInstance) { _sharedInstance = [[self alloc] init]; } } return _sharedInstance; } 为了保证线程安全,上面的代码把创建代理的代码包裹在同步块里. 相对于上面的实现方式,使用GCD的dispatch_once实现起来更为容易. 所用到的函数是: static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ // code to be executed once }); 此函数接受的类型为 dispatch_once_t的特殊函数 token,此外还接受块参数.对于给定的token来说,该函数保证相关的块必定会执行,且仅执行一次.首次调用该函数时必然会执行块中的代码, 最重要的是:次操作完全是线程安全的!!!需要注意的是:对于只需执行一次的块来说