OBJ-C中dispatch_once的用法

时间:2022-10-20 04:13:38

见如下代码:

+(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的值改为非零。