2

最近、iOSプロジェクトをARCに変換しました。プロジェクトには2つのターゲットがあります。1つはアプリケーション自体であり、もう1つは一連のGHUnitテストです。CoreDataオブジェクトの作成と変更に関して非常に多くの作業を行う約200のテストがあります。テストで使用されるCoreDataストアはメモリストアにあり、テストが終了すると破棄されます(つまり、どこにも永続化されません)。

テストをしばらく実行していると(エラーがスローされる前にまったく同じポイントに到達することはありませんが、常に同じテストになります)、アプリケーションはEXC_BAD_ACCESS(Code = 2、address = ...)でクラッシュします。

コンソールの出力は次のとおりです。 コンソール出力

この回答の指示に従い、GHUnitターゲットのmain.mファイルを-fno-objc-arcコンパイラフラグを使用するように設定しましたが、それは役に立たなかったようです。

私はこれらのエラーが何を意味するのか本当に理解していません、そしてそれらを探すことは役に立たなかったようです。私の唯一の推測は、メモリが不足しているということですが、ARCがオブジェクトを解放する必要があることを考えると、理由や方法がわかりません。

誰かがこれを修正するために私に与えることができるどんな助けにも本当に感謝します!ご不明な点がございましたら、コメントを残していただければ、できるだけ早くご連絡いたします。

ありがとう!

4

1 に答える 1

1

クリス、

まず、メモリの枯渇の問題があるため、Instruments割り当てツールで実行されているテストを確認する必要があります。VM自動スナップショットをオンにすることを忘れないでください。次に、テストの実行時にヒープに複数回マークを付ける必要があります。

第二に、これはARCに関連している可能性がありますが、そうではない可能性があります。一般に、ARCアプリは、オブジェクトをより早く自動的に解放できるため、MRRアプリよりもフットプリントが小さくなります。さまざまなオプションを備えた新しいコンパイラへの移行は、既存の問題を明らかにしているだけかもしれません。

第3に、インメモリデータベースを使用しているため、最初のテストは、データベースをSQLiteDBに変更することです。フットプリントを大幅に小さくすることができます。(後でメモリ内DBに戻ることを選択することもできますが、メモリ枯渇の原因を突き止めようとしています。メモリ内DBは大量のRAMを使用する可能性があるため、式から外れます。

上記の1番目と3番目のタスクを完了したら、結果を報告してください。

アンドリュー

于 2012-05-10T20:15:11.613 に答える