在我的 iPhone 应用程序中,我偶尔会看到由于 tableView:cellForRowAtIndexPath: 在后台线程上被调用而导致的崩溃。
显然,这不应该发生。我没有调用它,我的对象是 UITableView 的委托,而基金会正在调用它——我在堆栈中看到的唯一问题是线程
-_WebTryThreadLock(bool) -_dequeuReusableViewOfType -tableView:cellForRowAtIndexPath: -_createPreparedCellForGlobalRow:withIndexPath -_pthread_qathread
崩溃发生在 WebTryThreadLock 中——这并不奇怪,它不是线程安全的,不应该从主线程中调用。
但是我如何弄清楚为什么我的 tableView 委托在后台线程上被调用?
我想知道 - 如果我要在后台线程上调用 [tableView reloadData],会这样做吗?
我一直认为它只会在主线程上调度调用。我什至不确定我是否正在这样做,但我可能会这样做,我会检查它,但实际上,UIKit 不应该检查它并在主线程上调用委托方法吗?