1

実行時間が続くにつれて、ARC対応プロジェクトがますます多くのメモリを消費する理由を理解するためにinit、すべてのログにログを追加しました。dealloc1つのビューコントローラが原因であることがわかりました。初期化時の主な任務は、を作成してオブジェクトNSMutableArrayで埋めることです。NSNull実行中に、これらのnullオブジェクトをより意味のあるオブジェクトに交換します。その逆も同様です。基本的な遅延読み込みの設定です。

このビューコントローラがポップされると、NSMutableArrayその時点で存在していたnull以外のビューは解放されません。その結果、ViewController自体も解放されません。

これを解決するには、またはを空にするか、NSMutableArraynilに設定します。

これが必要な理由は何ですか?ARCで配列を作成した場合でも、配列をnilに設定するのは常に私の責任ですか?または、他の何かが配列内のオブジェクトの1つを保持し、それが自動的に割り当て解除されるのを防いでいる必要がありますか?

4

1 に答える 1

1

がインスタンス変数であるとすると、ViewControllerNSMutableArrayが解放されたときに解放される必要があります。オブジェクトのみがあるときにコントローラーdeallocが呼び出されても、配列を「意味のある」コンテンツで埋めても割り当てが解除されない場合は、間違いなく強力な参照サイクルがあります。つまり、ViewControllerへの参照が必要です。それ自体、の内容で。NSMutableArrayNSNullNSMutableArray

于 2012-09-28T21:52:05.187 に答える