以下代码是否在主线程上运行?“主队列”是指主线程吗?
dispatch_async(dispatch_get_main_queue(),
^{
// Some code
});
以下代码是否在主线程上运行?“主队列”是指主线程吗?
dispatch_async(dispatch_get_main_queue(),
^{
// Some code
});
调度异步与同步的异步部分不同于并发与串行。异步意味着函数立即返回,同步意味着它会等到块被执行。由于主线程/队列是串行的,因此事情将按顺序执行 - 我相信这意味着,由于您要求它在您正在调度的同一线程上异步调度,它会立即返回,等到当前运行循环的结尾和队列中的任何其他内容,然后执行您的块。
这对于队列内部比在主线程上更有用 - 您可以处理数据,让 UI 知道要更新,并继续处理而无需等待所有内容重绘等。这就是为什么您经常会看到 dispatch_async调用另一个dispatch_async(并发队列)中的主线程,而不仅仅是一个dispatch_sync。
是的。来自Apple 开发者网站:
调度框架提供了一个默认的串行队列供应用程序使用。该队列通过 dispatch_get_main_queue() 访问。
这在多个地方都有记录,包括文档dispatch_get_main_queue()
本身。并发编程指南说:
主调度队列是一个全局可用的串行队列,它在应用程序的主线程上执行任务。