22

注: この質問は、バックグラウンド スレッドからの UIKit の呼び出しに関する警告に関連していますが、以下の 2 つのアプローチについては回答がありません。

アプリの画面が速く点滅する問題があります。私は過去にその問題を抱えていましたが、それはメイン スレッドの外側で UI 要素を更新したことが原因です。

したがって、次のコードを多くの場所に配置しました。

assertMainThread();

つまり:

#define assertMainThread() NSAssert([NSThread isMainThread],@"Method called using a thread other than main!")

もちろん、assertMainThread() でコード全体をカバーすることはできません。多くの場所があり、一部のコードはバックグラウンド GCD キューによって正当な方法で使用されているためです。

多くの場所を調べましたが、UI 要素がメイン スレッドの外で更新されたときに、XCode または LLDB が通知する方法を見つけることができませんでした。シンボリック ブレークポイントまたはその他のメカニズムを使用して、たとえば UIKit の共通メソッドがメイン スレッドの外部で呼び出される場所でブレークできると考えましたが、方法が見つかりませんでした。

また、そのような呼び出しが行われたときにUIKitが実行時に警告できると思いましたか? または、少なくとも、そのような問題のデバッグに役立つツールを提供してください。

私が調べた (しかし試みなかった) 別のアプローチは、いくつかのコード カバレッジ手法を使用し、コードのどの時点でどのスレッドが実行されているかを視覚的に抽出しようとすることですが、そのルートには行きませんでした。

問題に取り組む方法について何か考えはありますか?

4

3 に答える 3