私の iPhone アプリでは、tableView:cellForRowAtIndexPath: がバックグラウンド スレッドで呼び出されたことが原因でクラッシュが発生することがあります。
明らかに、これは起こってはなりません。私はそれを呼び出していません。私のオブジェクトはUITableViewへのデリゲートであり、財団がそれを呼び出しています-問題のスレッドのスタックに表示されるのは
-_WebTryThreadLock(bool) -_dequeuReusableViewOfType -tableView:cellForRowAtIndexPath: -_createPreparedCellForGlobalRow:withIndexPath -_pthread_qathread
クラッシュは WebTryThreadLock で発生します - 本当に驚くべきことではありません。これはスレッドセーフではなく、メイン スレッドから呼び出されるべきではありません。
しかし、tableView デリゲートがバックグラウンド スレッドで呼び出されている理由をどのように把握すればよいでしょうか。
バックグラウンド スレッドで [tableView reloadData] を呼び出すとしたら、それでよろしいでしょうか。
とにかく、メインスレッドで呼び出しをディスパッチするだけだといつも思っていました。私がそれを行っているかどうかはわかりませんが、そうかもしれません。それを確認しますが、実際には、UIKit がそれを確認してメインスレッドでデリゲート メソッドを呼び出すべきではありませんか?