dispatch_once

2021-03-22  本文已影响0人  Breezes

关于对 dispatch_once 函数的解释


image.png

大意为:执行这个 block 一次,切只执行一次
在 iOS 内常用于创建单例
为什么这个函数能保证 block 只执行一次呢?

_dispatch_once(dispatch_once_t *predicate,
        DISPATCH_NOESCAPE dispatch_block_t block)
{
    if (DISPATCH_EXPECT(*predicate, ~0l) != ~0l) {
        dispatch_once(predicate, block);
    } else {
        dispatch_compiler_barrier();
    }
    DISPATCH_COMPILER_CAN_ASSUME(*predicate == ~0l);
}

通过声明一个 static类型的 dispatch_once_t 标记

上一篇下一篇

猜你喜欢

热点阅读