私が作成しているアプリケーションは、「メモリ警告」が発生し続け、最終的にクラッシュします。ビューがサブビューとして追加されたカスタム ビュー コントローラー クラスで release が呼び出されたときに、メモリが解放されないようです。
これが私の状況の例です:
付随する .xib を使用してビュー コントローラーを作成しました (ユーザーが再生するビデオを選択できるようにする一種のポップオーバー/メニューを追加するため)。画面/アプリの右上隅にあるボタンは、作成した videoMenu クラスの新しいインスタンスを割り当てる関数を呼び出し、そのビューをサブビューとして追加します。ユーザーがビデオを選択すると、関数が呼び出されてポップオーバー/メニューのビューが非表示になり、(ビデオを表示/再生する前に) インスタンスが解放されます。メニューが「開いている」状態でボタンをもう一度押すと、閉じるボタンのように動作するように設定しました (メニューを非表示にしてから解放する) ... つまり、メニューを切り替えます。
ボタンを押し続けると、メニューが表示され、非表示/解放が繰り返されます...これは予想どおりです。Instruments->Allocations で、リリースが呼び出されたときに割り当てが減少しないことに気付きました。あたかもリリースが実際にメモリを解放しないかのように、私が開く/閉じる/開く/閉じるなどすると、割り当てが増え続けます。実際に呼び出されていることを確認するために、メニューに を追加しましたNSLog
。dealloc
dealloc
[videoMenu.view removeFromSuperview]
を呼び出す前に を呼び出すと[videoMenu release]
、実際には割り当てが減少することに気付きました。
解決策はremoveFromSuperview
ありますか?それは必要ですか?
.xib ファイルには多くのUIImageViews
ものが含まれており、それらが割り当てが継続的に増加する理由であるかどうかも疑問に思っています (上記の例で) ... つまり、同じ画像が何度もキャッシュされ続けるのでしょうか?