主线程检查器:UI API 在后台线程上调用:-[UIApplication delegate]
Main Thread Checker: UI API called on a background thread: -[UIApplication delegate]
Xcode 9 似乎报告了很多对 UIApplication 属性的主线程调用。尽管 UI 没有更新,但由于日志的扩展,它会产生默认环境,这特别麻烦。
4 TestApp 0x0000000101c262e0 __39-[ViewController viewDidLoad]_block_invoke + 196
5 libdispatch.dylib 0x0000000102279654 _dispatch_call_block_and_release + 24
6 libdispatch.dylib 0x0000000102279614 _dispatch_client_callout + 16
7 libdispatch.dylib 0x0000000102289008 _dispatch_queue_serial_drain + 716
8 libdispatch.dylib 0x000000010227ce58 _dispatch_queue_invoke + 340
9 libdispatch.dylib 0x000000010228a1c4 _dispatch_root_queue_drain_deferred_wlh + 412
10 libdispatch.dylib 0x00000001022917fc _dispatch_workloop_worker_thread + 868
11 libsystem_pthread.dylib 0x00000001ac6771e8 _pthread_wqthread + 924
12 libsystem_pthread.dylib 0x00000001ac676e40 start_wqthread + 4
如果这些报告消息让您感到困惑取消选中它们:
- 编辑方案...
- 取消选中 运行 > 诊断
中的 "Main Thread Checker"
同时检查 ARKit template Xcode project Main Thread Checker log console。
如果从另一个线程调用 UIApplication 或 UIApplicationDelegate 方法,您可以像 CGN 答案中一样禁用检查线程,但它会完全禁用此检查器。您还可以对必要的子类进行子类化,并在主线程上调用超类的方法。这样你仍然可以在代码的其他地方使用Main Thread Sanitizer
Xcode 9 似乎报告了很多对 UIApplication 属性的主线程调用。尽管 UI 没有更新,但由于日志的扩展,它会产生默认环境,这特别麻烦。
4 TestApp 0x0000000101c262e0 __39-[ViewController viewDidLoad]_block_invoke + 196
5 libdispatch.dylib 0x0000000102279654 _dispatch_call_block_and_release + 24
6 libdispatch.dylib 0x0000000102279614 _dispatch_client_callout + 16
7 libdispatch.dylib 0x0000000102289008 _dispatch_queue_serial_drain + 716
8 libdispatch.dylib 0x000000010227ce58 _dispatch_queue_invoke + 340
9 libdispatch.dylib 0x000000010228a1c4 _dispatch_root_queue_drain_deferred_wlh + 412
10 libdispatch.dylib 0x00000001022917fc _dispatch_workloop_worker_thread + 868
11 libsystem_pthread.dylib 0x00000001ac6771e8 _pthread_wqthread + 924
12 libsystem_pthread.dylib 0x00000001ac676e40 start_wqthread + 4
如果这些报告消息让您感到困惑取消选中它们:
- 编辑方案...
- 取消选中 运行 > 诊断
同时检查 ARKit template Xcode project Main Thread Checker log console。
如果从另一个线程调用 UIApplication 或 UIApplicationDelegate 方法,您可以像 CGN 答案中一样禁用检查线程,但它会完全禁用此检查器。您还可以对必要的子类进行子类化,并在主线程上调用超类的方法。这样你仍然可以在代码的其他地方使用Main Thread Sanitizer