我一直在使用dispatch_once进行共享实例,但我不明白的是dispatch_once是如何工作的,为什么它只运行一次。
答案 0 :(得分:1)
低级计算答案。
试图访问关键部分(传递给dispatch_once的代码)的不同线程将被阻塞,直到关键部分完成为止。
只能是一个
应注意,这仅使对共享实例线程的访问安全。不一定会使类线程安全。
答案 1 :(得分:0)
dispatch_once()是同步进程,并且所有GCD方法都是异步执行的(例如,dispatch_sync()是同步的)
dispatch_once()的整个想法是“只执行一次”,这正是我们正在做的事情。
dispatch_once用于保证某些事情恰好发生一次,无论程序的线程变得多么暴力