我正在试验新的 Xcode 9 主线程检查器
这是非常整洁的。我现在想标记/注释我的 Obj-C 方法,使其仅从主线程调用,以便主线程检查器在附加到调试器时可以自动启动。我找不到任何方法可以做到这一点。
你不能(见更新(。但是您可以使用断言来手动执行此操作(例如PSPDFKit所做的(
assert(Thread.isMainThread, "Method must be called from the MainThread only!")
更新:
没有办法。来自员工的推文:
不幸的是,没有;你不能教主线程检查器关于你的API(CC @kubamracek(
按@zaks_anna(程序分析@apple(
更新2:苹果正在跟踪一个开放的雷达,ID#32659599。因此,希望它能很快™实施。
主线程检查器的主要问题是,当后台线程到达它时,即在运行时,它可以捕获仅执行主线程的代码。
真正的解决方案是在执行代码之前使用静态检查,因为有时很难在非平凡的应用程序中的所有用例中完成。
更重要的是,代码在错误的线程上执行并不是一个信息(断言(,而它无论如何都会在片刻后崩溃。
我想在 Swift 中看到这样的东西:@mainThreadOnly
和@isOnMainThread
和
if #mainThreadOnly && !#isOnMainThread { raise_warning }