17

以下代码是否在主线程上运行?“主队列”是指主线程吗?

dispatch_async(dispatch_get_main_queue(),
^{
   // Some code
});
4

3 回答 3

28

调度异步与同步的异步部分不同于并发与串行。异步意味着函数立即返回,同步意味着它会等到块被执行。由于主线程/队列是串行的,因此事情将按顺序执行 - 我相信这意味着,由于您要求它在您正在调度的同一线程上异步调度,它会立即返回,等到当前运行循环的结尾和队列中的任何其他内容,然后执行您的块。

这对于队列内部比在主线程上更有用 - 您可以处理数据,让 UI 知道要更新,并继续处理而无需等待所有内容重绘等。这就是为什么您经常会看到 dispatch_async调用另一个dispatch_async(并发队列)中的主线程,而不仅仅是一个dispatch_sync。

于 2012-05-11T20:24:39.700 回答
24

是的。来自Apple 开发者网站

调度框架提供了一个默认的串行队列供应用程序使用。该队列通过 dispatch_get_main_queue() 访问。

于 2012-05-11T20:16:28.980 回答
8

这在多个地方都有记录,包括文档dispatch_get_main_queue()本身并发编程指南说:

主调度队列是一个全局可用的串行队列,它在应用程序的主线程上执行任务。

于 2012-05-11T20:18:59.727 回答