obsidian/笔记文件/2.笔记/dispatch_once.md
2025-03-26 00:02:56 +08:00

1.4 KiB
Raw Blame History

#unity/日常积累

dispatch_once 是 Apple 在其 Grand Central Dispatch (GCD) 库中提供的一个函数,用于确保某个代码块只执行一次,无论它被调用多少次。这个函数特别有用,在初始化单例对象或执行只需要执行一次的任何设置代码时尤其方便。

dispatch_once 函数接受一个 dispatch_once_t 类型的静态或全局变量作为第一个参数,这个变量用于跟踪代码块是否已经被执行过。第二个参数是一个 dispatch_block_t 类型的代码块,它包含了只需要执行一次的代码。

下面是一个使用 dispatch_once 的例子:

static dispatch_once_t onceToken;
dispatch_once(&onceToken, {
    // 这里面的代码只会被执行一次
    // 通常用于初始化单例对象或执行只需要执行一次的任何设置代码
});

在这个例子中onceToken 是一个 dispatch_once_t 类型的静态变量它用于跟踪代码块是否已经被执行。dispatch_once 函数确保无论它被调用多少次传递给它的代码块只会被执行一次。 需要注意的是dispatch_once 只能在应用程序的生命周期内保证代码块执行一次。如果应用程序重新启动dispatch_once 会再次执行代码块。此外由于 dispatch_once 是线程安全的它可以在多线程环境中安全地使用而不需要额外的同步机制。