3

我正在试验新的 Xcode 9主线程检查器

这很整洁。我现在想标记/注释我的 Obj-C 方法以仅从主线程调用,以便主线程检查器可以在附加到调试器时自动启动。我找不到任何方法来做到这一点。

4

2 回答 2

2

你不能(见更新)。但是您可以使用断言手动执行此操作(例如 PSPDFKit 所做

assert(Thread.isMainThread, "Method must be called from the MainThread only!")


更新:

不可能。来自员工的推文

不幸的是,没有;你不能教主线程检查器关于你的 API (CC @kubamracek)

@zaks_anna (程序分析@apple)


更新 2:Apple 正在跟踪一个开放式雷达,ID#32659599。因此,希望它很快就会实施™。

于 2017-07-25T14:10:25.613 回答
0

主线程检查器的主要问题是,当后台线程(即运行时)到达后台线程时,它只能捕获执行主线程的代码。

真正的解决方案是在代码执行之前使用静态检查,因为有时很难在一个非平凡的应用程序中遍历所有用例。

更重要的是,代码在错误的线程上执行并不是一个信息(断言),而无论如何它会在稍后崩溃。

我想在 Swift 中看到类似的东西: @mainThreadOnly@isOnMainThread

if #mainThreadOnly && !#isOnMainThread { raise_warning }

于 2019-10-13T09:36:11.807 回答