见如下代码:
+(GameState*)sharedGameState{
static GameState *sharedInstance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [GameState new];
});
return sharedInstance;
}
首先声明了2个静态(全局)变量。无论你将它们放在方法内部还是外部都没什么关系。它们都被初始化为0(nil)。
sharedInstance存储单例类实例的引用,而onceToken是一个有趣的变量,实际它的数据类型是long。
dispatch_one函数仅仅运行block一次!传入一个指向onceToken的变量。仅仅当onceToken为0时block才会运行,而当dispatch_once运行过block之后,会将onceToken的值改为非零。