旧设备上的异步DispatchQoS.QoSClass.background

时间:2018-07-10 04:21:17

标签: ios swift grand-central-dispatch

我正在尝试使用这段代码:

func simpleEscaping(test: String, complete: @escaping (_ testEscaped: String)->()) {
    complete(test)
}

func testBgAsync() {
    let backgroundQueue = DispatchQueue.global(qos: DispatchQoS.QoSClass.background)
    simpleEscaping(test: "Test") { (testEscaped) in

        backgroundQueue.async {
            sleep(1)
            print("Test escaped value is: \(testEscaped)")
        }
    }
}

testBgAsync()

它在操场上可以正常工作:

  

“测试转义值是:测试”

显示

我也在实际设备上尝试了以下代码:

  
      
  • iPhoneX v11.4
  •   
  • iPhone5C v10.3.3
  •   

结果与iPhoneX相同:

  

“测试转义值是:测试”

对于iPhone5C:没有结果。试图放置一些断点,并发现backgroundQueue.async {}中的代码未运行。

是因为实施不当还是因为设备版本不同而有所不同?

1 个答案:

答案 0 :(得分:0)

通常,您应使用的最低QoS为.utility

.background的优先级非常低,处于该优先级的项目可能永远不会发送,尤其是在低功耗设备(例如iPhone 5C)上