2017-08-28 19 views

回答

2

的“服务质量”的定义描述如下:

https://developer.apple.com/library/content/documentation/Performance/Conceptual/EnergyGuide-iOS/PrioritizeWorkWithQoS.html

它看起来像“主”线程都将具有QoS等级“用户交互”的。但是,仅仅因为线程是用“用户交互式”QoS创建的,并不意味着它是“主要”线程。

您可以在Xcode调试器中观察到这一点。在异步块内放置一个断点并查看Debug Navigator活动线程面板。当从主线程调用DispatchQueue.global(qos: .userInteractive).async{}时,它将显示与主线程不同的名称。

通常,主线程被认为是应执行所有与视图相关的访问的特殊线程。如果某件事会消耗任何显着的时间,例如调用Web服务,压缩文件等,您将需要在单独的队列中运行代码,并且当该过程完成时,返回到更新用户界面的主队列。

还要注意,当在iOS 11中使用Xcode 9时,当从非主线程访问用户界面对象时将发出警告。

+0

我试过了断点实验......它显示不同的线程...... 但是我在Stackoverflow中遇到了这个帖子.. https://stackoverflow.com/questions/44324595/difference-between-dispatchqueue-main- async-and-dispatchqueue-main-sync/44324968#44324968 这里还有人写道,两者都是一样的。 –