大中央调度,QOS用户互动vs获取主队列

时间:2016-08-26 08:11:27

标签: ios swift grand-central-dispatch

我正在做一个关于大中央派遣的教程。本质上,教师在一个闭包内部有一些代码,这些代码是长时间运行的任务,因此他将所有内容都放在后台队列中(代码太长而无法编写,也没有提供源代码)。总之,他有这种格式

dispatch_async(QOS_CLASS_BACKGROUND,  {
    //time consuming tasks which should not be on main queue
})

然而,在闭包中,所有内容都在后台队列中,有一些代码更新了用户界面。我被教导(主要是由udacity),所有UI更新应该在主队列上。因此

dispatch_async(dispatch_get_main_queue(), ...

虽然是教练,而是使用

dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0), {...}

我知道这是合适的,因为QOS_CLASS_USER_INTERACTIVE用于与用户界面链接的即时任务。但是使用vs get_main_queue的优势是什么?

1 个答案:

答案 0 :(得分:3)

dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)返回全局并发 队列,适合需要完成的任务"快速"为了更新 用户界面。此队列上的任务优先级高于例如在...上的任务  QOS_CLASS_BACKGROUND队列。但这是主队列。

UI更新本身必须在您使用的主队列上完成 dispatch_get_main_queue()