私は、大量のデータを受信してコアデータに保存するココアアプリに取り組んでいます(多くの逆関係を持つ500Kオブジェクト以上)。アプリは常にサイクルで実行する必要があります。私が遭遇する問題は、各サイクルの後、割り当てられたメモリが20〜40メガバイト増加していることです(xcodeで示されています。もちろん、アクティビティモニターで示されているのと同じ傾向です)。
私がこれまでに持っているもの:
- 自動解放プールのコンテキストにオブジェクトを挿入するラップされたメソッド。
- コンテキストをリセット、undoManager nil、stalenessInterval 0;
- サイクルの完了時に永続ストア コーディネータを再作成します (ストアの削除と追加)。
- 何時間ものプロファイリングを行いましたが、リークの原因を見つけることができませんでした
このアクションのリストを改善できる場合は、アドバイスをいただければ幸いです。私の主な質問は、システム メモリをどのように処理すればよいかということです。コードを最適化できなくなる可能性があるためです。十分なメモリがないためにアプリがクラッシュするのを許してはなりません。したがって、私が今対処する方法は、メモリ割り当てがハードコードされた値 (1 GB など) に達した場合にアプリを再起動することです。
私はこの解決策が気に入らないので、誰かがこれを処理する適切な方法についてアドバイスしてくれることを願っています. または、経験豊富な人がそのような状況に対処する方法について。ありがとう
アップデート
最初のサイクルが終了したときに、計測器と xcode のメモリ デバッグ ゲージからスナップショットを追加します。