全局与用户队列

时间:2017-04-25 22:21:28

标签: swift3 grand-central-dispatch

我想按下UI按钮触发一段代码,所以我创建了一个队列并向其发送了一个块异步,但是我没有看到该块在合理的时间内启动。

最小化示例:

class InterfaceController: WKInterfaceController {
    ...
    let queue = DispatchQueue(label: "unique_label", qos: .userInteractive)

    @IBAction func on_press() {
        print("Touch")
        queue.async {
            // Stuff
        }
    }
}

所以我看到"触摸"控制台中的行,但是异步块中没有任何内容发生。

奇怪的是,如果我使用let queue = DispatchQueue.global()代替它,它似乎可以按预期工作。那么在我自己的队列和使用全局队列之间的操作区别是什么?我本以期望我的QoS给它一些CPU时间。

1 个答案:

答案 0 :(得分:0)

  

那么创建自己的队列和运行之间的差异是什么?   在这里使用全球?

let queue = DispatchQueue(label: "unique_label", qos: .userInteractive)

创建具有高优先级的.serial队列

let queue = DispatchQueue.global()

除了以qos .default返回全局(系统).concurrent queue 之外,实际上什么都不创建。

当您创建自己的队列时,系统将决定在哪个全局队列中调度您的执行请求。队列不是执行引擎...

我无法相信,你的代码永远不会被执行,它不太可能是真的。如果它发生了,那么问题必须在你的代码中某处,这不是你问题的一部分。

相关问题