如何仅从Obj-C中的主线程标记要调用的方法?

时间:2017-07-25 11:56:21

标签: xcode9-beta compiler-options xcode9

我正在尝试新的Xcode 9 Main Thread Checker

这很漂亮。我现在要标记/注释我的Obj-C方法只能从主线程调用,这样主线程检查器可以在连接到调试器时自动启动。我找不到任何办法。

2 个答案:

答案 0 :(得分:1)

你不能(见更新)。但你可以使用一个断言手动完成(就像PSPDFKit为example做的那样)

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


更新

没有办法。 Tweet from an employee

  

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

     
    

@zaks_anna(节目分析@apple)

  


Update2:Apple正在跟踪一个开放式雷达,ID为#32659599。所以希望它很快就会实施。

答案 1 :(得分:0)

Main Thread Checker的主要问题在于,它可以在后台线程到达时(即在运行时)捕获仅执行主线程的代码。

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

此外,在错误的线程上执行代码还不是完全的信息(断言),但稍后它仍然会崩溃。

我想在Swift中看到这样的内容: @mainThreadOnly@isOnMainThread

if #mainThreadOnly && !#isOnMainThread { raise_warning }