私は 2 年前に巨大な iPad アプリを書きましたが、今はそれに戻って iOS5 にアップグレードしています。初めての大規模な iPad アプリだったので、少し面倒です。
これには数分間続く「同期」ステップがあり、これらは URL から JSON をフェッチしてコア データに入れる一連の非同期メソッド呼び出しです。かなり頻繁に、アプリがフリーズします (UI が応答しなくなります)。
この凍結を追跡するための良いテクニックは何ですか? コードがメイン スレッドで実行されていない限り、使用可能なスタック トレースがないため、デバッガーはあまり役に立ちません。多くの場合、アプリはどちらも回復しません。これは、ある種のデッドロック状況を示唆しています。
役立つ可能性のある特定の例を次に示します。
フリーズしていることを確認したら、実行を一時停止しました。毎回同じ行でフリーズしているようです - 簡単な割り当てです。ここで何が起こっているのですか?とてもイライラします。
これは、これを引き起こしているコアデータアクセスですか? 任意のポインタをいただければ幸いです。
編集 2012 年 6 月 29 日
コア データ オブジェクトのすべての作成/更新/削除を行うクラスのソースを表示するには、ここをクリックしてください。このアプリのフリーズ/クラッシュを止める必要があります。私はそれが混乱していることを知っています、それは私もうんざりさせます。私はこれを 2 年前に書きましたが、objective-c についてほとんど知識がありませんでした。書き直す必要がありますが、これを機能させて2日で頭から離さなければなりません。このスレッドセーフをすばやく取得するためのアプローチについて、誰かが私に指針を与えることができますか? NSManagedObjectContext を更新する各メソッドをグランド セントラル ディスパッチ ブロック コードでラップできますか?