iOS多线程学习小记『GCD的API之dispatch_once』

3.2.12 dispatch_once

dispatch_once 函数是保证在应用程序执行中执行一次指定处理的API。下面这种经常出现的用来进行初始化的源代码可通过dispatch_once函数简化。

    static int  initialized = NO;
    
    if (initialized == NO) {
        /**
         初始化
         */
        initialized = YES;
    }
    

如果使用dispatch_once 函数,则源码写为:

    static dispatch_once_t pred;
    dispatch_once(&pred, ^{
        /**
         初始化
         */
    });

源代码看起来没有太大变化,但是通过dispatch_once函数,该源码即使在多线程环境下执行,也可保证百分之百安全。

之前的源代码字大多数情况下也是安全的。但是在多核CPU中,在正在更新表示是否初始化的标志变量时读取,就有可能多次执行初始化处理。而使用dispatch_once函数初始化就不必担心这样的问题。这就是所说的单利模式,在生成单例对象时使用。

你可能感兴趣的:(iOS多线程学习小记『GCD的API之dispatch_once』)