1

iPADで実行しているアプリがあります。かなり複雑なものだと思います。私が今直面している主な問題は、メモリのクラッシュです。いくつかのディスカッションスレッドを通過した後、私はそれを解決する方法を理解できませんでした。

すべてのメモリリークが修正されました。機器のヒープショットを監視している間、それらはサイクルごとに1 MBのオーダーで一貫して増加します(アプリの通常の「状態」でヒープショットを取得します)。ヒープショットの増加の80%は、「非オブジェクト」カテゴリにあります。それらのすべての参照カウントは1です。

これらの非オブジェクトメモリがメモリクラッシュの考えられる理由を占有していますか?それともこれは単なる症状ですか?根本的な原因について他の場所を探す必要がありますか?これらが考えられる原因である場合、これらのメモリホッグを排除する体系的な方法は何ですか?

編集:スクリーンショットを追加しました。ご覧のとおり、私のコードへの呼び出しはありません(下部のmain()を除く)。誰かが右側の拡張された詳細を理解して、参照カウントが1のこの16ビットのメモリ(非オブジェクト)を削除することができますか?これはほんの一例であり、そのような数千があり、私の記憶が大きくなります。

ここに画像の説明を入力してください

4

1 に答える 1

1

これらは、と同様に、ヒープに割り当てられた単純なバッファだと思いますmalloc()。2つのヒープショット間で割り当てられ、割り当てが解除されなかったものすべてについて、スタックトレースを調べて、割り当ての原因を確認します。コードに含まれている場合は、そのように割り当てたものをすべて解放していることを確認してください。

ちなみに、すべてのメモリ管理の問題が真のリークにつながるわけではありません。真のリークとは、コードがアドレスを失ったために、おそらくそれを解放できない割り当てです。疑似リークとは、オブジェクトへの参照がまだある場合ですが、コードがそれを再び使用することはありません。つまり、実際にリリースして忘れてしまったはずのデータ構造に、二度とアクセスされない場所に格納しているということです。

したがって、必要のないときにオブジェクトを保持しているため、オブジェクト以外の割り当てを担当する場合があります。

于 2012-04-21T11:57:54.163 に答える