1

ARC 以外のアプリでメモリ割り当てを強化しようとしています。参照カウントが 0 であっても、2 つのヒープショット間で永続オブジェクトとしてリストされるオブジェクトがいくつかあります。

これは私のヒープショットビューです:ここに画像の説明を入力

たとえば、最初のヒープショット (0x6deb180) で選択された LSBookChapter を見てみましょう。これはそのオブジェクトの履歴です:

ここに画像の説明を入力

そのオブジェクトが割り当て解除されないのはなぜですか? 参照カウントが 0 の場合、そのオブジェクトをいつ保持しすぎたのかわかりません。

4

2 に答える 2

6

ゾンビ検出をオンにしていませんか?

ゾンビの検出によって割り当てが解除されることはありませんが、保持カウントがゼロになる可能性が高く、さらに便利なことに、保持の原因と解放の原因となるイベントの間に 1 対 1 の対応が見られます。


また、「ライブ アロケーションのみを追跡する」をオンにしない場合、割り当てが解除された後、Instruments にオブジェクトが表示され、保持カウントは 0 になりますが、実際には割り当てが解除されています。

于 2012-06-13T16:28:48.310 に答える
1

以前のアプリケーションでは、リークは発生していませんでしたが、メモリが増加していたため、現在のようにいくつかの懸念がありました。いくつかの調査の後、私はこれに出くわしまし。私は彼の記事のいくつかのショートカットを作成しようとしましたが、結局、何が間違っているのかを実際に理解するためにすべてを読んだだけです. はい、すべての問題を特定することができました。そして、私はかなりの数を持っていたと言えるかもしれません。

あなたの特定の問題について、私はあなたが今しようとしていることをしませんでした:異なるヒープショットでオブジェクトのretainCountを見てください。正直時間の無駄だと思います。私の主な目標は、何かを実行して元に戻した場合にメモリが増加しないようにすること、または増加した場合でもわずかに増加することを確認することです (簡単な例: 新しいものに移動してUIViewController戻るボタンを押す)。

于 2012-06-13T10:41:52.890 に答える