什么是Xcode中的主线程检查器

时间:2017-07-06 08:47:40

标签: ios swift ios12

我检查了Xcode 9文档中的新内容,我发现了这个

enter image description here

但是我不明白我怎样才能在新的Xcode 9中使用它。

4 个答案:

答案 0 :(得分:25)

可以在方案的诊断选项中启用/禁用它。 此外,"暂停问题"是调试这些问题的一个舒适选择。

Example

答案 1 :(得分:16)

来自Apple documentation

  

主线程检查器是Swift和C语言的独立工具   检测到AppKit,UIKit和其他API的无效使用情况   背景线程。在主线程以外的线程上更新UI   是一个常见的错误,可能导致错过UI更新,视觉   缺陷,数据损坏和崩溃。

例如,尝试在后台更改text的{​​{1}}属性 线程不起作用。 Apple表示,这可能导致错过UI更新,视觉缺陷,数据损坏和崩溃。在实践中,99%的时间会导致随机错过UI更新和视觉缺陷(而不是崩溃)。

崩溃实际上很好,因为我们可以轻易地检测到UILabel的这种不当使用,但在开发过程中很难检测到随机视觉缺陷。这就是主线程检查器的用武之地。

主线程检查器将帮助检测在后台线程中使用UIKit无法解决这些问题。在后台线程中检测到使用UIKit后,您可以使用UIKit解决此问题。

再次,来自Apple documentation

DispatchQueue的文档说明将在后台线程上调用完成闭包,所以这很糟糕,主线程检查器将帮助您检测后台线程上UIKit的使用。

URLSession

解决方案:使用let task = URLSession.shared.dataTask(with: url) { (data, response, error) in if let data = data { self.label.text = "\(data.count) bytes downloaded" // Error: label updated on background thread } } task.resume() 在主线程上执行UI更新。

DispatchQueue.main

解决方案本身与Xcode无关,它是该语言的一个特性。所以很明显在Xcode的早期版本中是可能的,但在Xcode 9之前你没有主线程检查器来帮助你检测问题。

正如@hamish指出的那样,您还可以观看the WWDC video以获得更详细的解释。

答案 2 :(得分:0)

在Runtime API Checking部分下,确保启用主线程检查器以查看您是否在非UI线程中执行ui方法

https://jersey.github.io/documentation/latest/user-guide.html

enter image description here

答案 3 :(得分:-1)

在 XCODE-12 中 去调试然后选择方案然后编辑方案 选择运行 -> 诊断