使用dispatch_get_main_queue()是否意味着我的代码将在主线程上?

时间:2012-05-11 20:14:28

标签: objective-c grand-central-dispatch dispatch-async

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

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

3 个答案:

答案 0 :(得分:28)

dispatch async vs sync的异步部分与并发vs serial不同。异步意味着函数立即返回,同步意味着它将一直等到块执行。由于主线程/队列是串行的,所以事情将按顺序执行 - 我相信这意味着因为你要求它在你发送的同一个线程上进行异步调度,所以将立即返回,等待当前运行循环结束和队列中的任何其他内容,然后执行您的阻止。

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

答案 1 :(得分:24)

是。来自Apple developer site

  

调度框架为其提供默认的串行队列   申请使用。可以通过访问此队列   dispatch_get_main_queue()。

答案 2 :(得分:8)

这在多个地方都有记录,包括docs for dispatch_get_main_queue() itselfConcurrency Programming Guide说:

  

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