darwin-dispatch-once-nonstatic¶
查找没有静态或全局存储的 dispatch_once_t
变量声明。 使用 dispatch_once_t
谓词的自动或动态存储的行为由 libdispatch 定义为未定义,应该避免。
一个常见的模式是让函数在函数运行时初始化内部静态或全局数据一次,但程序员有时会错过 dispatch_once_t
谓词上的 static,导致在栈的支配下未初始化的标志值。
程序员还已知将 dispatch_once_t
变量设为结构或类的成员,目的是延迟执行一些昂贵的结构或类成员初始化,只执行一次;但是,这违反了 libdispatch 的要求。
有关更多信息,请参阅 Apple 的 dispatch_once 文档 的讨论部分。