Cuo*_*ong 5 concurrency ios swift dispatch-queue
我用 DispatchQueue 做了简单的测试:
DispatchQueue.global(qos: .background).sync {
if Thread.isMainThread {
print("Main thread")
}
}
Run Code Online (Sandbox Code Playgroud)
它打印出来:
Main thread
Run Code Online (Sandbox Code Playgroud)
为什么这段代码在主线程上执行?它应该在后台线程上执行(它被添加到后台队列中),对吗?
因为实际上没有必要。您正在通过使用sync 来阻塞主线程。iOS 选择只在主线程上执行它,而不是费心切换到后台线程(后台队列),因为由于主线程无论如何都会被阻塞,所以这并不重要。
Apple 关于同步功能的文档(和快速帮助)包括以下行:
作为一种优化,此函数会在可能的情况下调用当前线程上的块。
| 归档时间: |
|
| 查看次数: |
767 次 |
| 最近记录: |