gpt4 book ai didi

objective-c - 我可以将 dispatch_once_t 谓词声明为成员变量而不是静态的吗?

转载 作者:太空狗 更新时间:2023-10-30 03:11:20 24 4
gpt4 key购买 nike

我只想在每个实例中运行一次代码块。

我可以将 dispatch_once_t 谓词声明为成员变量而不是静态变量吗?

来自 GCD Reference ,我不清楚。

The predicate must point to a variable stored in global or static scope. The result of using a predicate with automatic or dynamic storage is undefined.

我知道我可以使用 dispatch_semaphore_t 和一个 bool 标志来做同样的事情。我只是好奇。

最佳答案

dispatch_once_t 不能是实例变量。

dispatch_once() 的实现要求dispatch_once_t 为零,并且从来不为非零。以前非零的情况需要额外的内存障碍才能正常工作,但 dispatch_once() 出于性能原因省略了这些障碍。

实例变量被初始化为零,但它们的内存可能先前存储了另一个值。这使得它们对 dispatch_once() 使用不安全。

关于objective-c - 我可以将 dispatch_once_t 谓词声明为成员变量而不是静态的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13856037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com