关于对 dispatch_once 函数的解释

大意为:执行这个 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 标记
网友评论