dispatch_once中的块运行在哪个线程?

Boo*_*oon 4 multithreading objective-c grand-central-dispatch

dispatch_once中的块运行在哪个线程?如果代码是从主线程运行的,dispatch_once块是否可以在后台线程中运行?无论哪个线程执行它,我如何确保它在主线程上运行?

ipm*_*mcc 6

它在当前/调用线程中运行.如果你想我想你可以使用dispatch_sync它来确保它在后台线程上运行但是我不确定那会让你得到什么.总而言之,它在当前线程中运行.如果另一个线程已经在dispatch_once块中,则调用线程将阻塞,直到该块在另一个线程上完成执行,然后继续.

  • 从iOS 8/Yosemite开始,`dispatch_once`还将确保实际执行块的线程将以相同的`dispatch_once`中等待的所有其他线程中的最高QoS(~priority)运行以完成块. (2认同)