注意:这个问题与从后台线程调用UIKit的警告有关,但没有给出下面两种方法的答案.
我有一个问题,应用程序屏幕快速闪烁.我过去已经遇到过这个问题,这是因为更新了主线程之外的UI元素.
因此,我将以下代码放在很多地方:
assertMainThread();
Run Code Online (Sandbox Code Playgroud)
这是:
#define assertMainThread() NSAssert([NSThread isMainThread],@"Method called using a thread other than main!")
Run Code Online (Sandbox Code Playgroud)
当然我无法使用assertMainThread()来覆盖整个代码,因为有很多地方和一些代码由背景GCD队列以合法的方式使用.
我看了很多地方,但找不到XCode或LLDB告诉我何时在主线程之外更新UI元素的方法.我认为可以使用符号断点或其他一些机制来破解UIKit中常见方法在主线程外部调用的地方,但是找不到方法.
我还以为UIKit可以在运行时发出警告吗?或者至少给我们一些工具来帮助调试这些问题.
我看过的另一种方法(但没有尝试)是使用一些代码覆盖技术,并尝试在视觉中提取代码中的哪个线程,但没有走那条路.
你对如何解决这个问题有任何想法吗?
我的应用程序在iOS 5中崩溃,因为我有一些代码从辅助线程调用UIKit实例.当您看到以下错误时,您知道有这个问题:
bool _WebTryThreadLock(bool),0x811bf20:不允许在网络线程上进行多次锁定!请提交一个错误.现在崩溃......
所以我的问题是,我可以通过哪些方法找到从辅助线程调用UIKit实例的代码?
以下是我已经尝试过的一些事情:
assert([NSThread isMainThread])在可能在辅助线程中处理的位置添加_WebTryThreadLock这些东西帮助我找到了问题所在.但是,在我的最终崩溃中,_WebTryThreadLock断点在任何其他线程中都没有堆栈跟踪.那么,如何在没有堆栈跟踪的情况下找到导致问题的代码?
谢谢你的时间!