美文网首页
iOS多线程学习小记『GCD的API之dispatch_once

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

作者: Steven_2016 | 来源:发表于2018-07-26 11:28 被阅读22次

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

      本文链接:https://www.haomeiwen.com/subject/djavmftx.html