2011-06-23 2 views
1

ビューが2つあるとします。最初のビューでは、I等、UIImages、例えばUILabelのような多くのUIコンポーネントを表示することにメモリを割り当てるiPhone:ビューを切り替えるときにUIアイテムをdeallocおよびrellocateすることをお勧めしますか?

は、それが割り当てられたメモリを解放するためにOKです(UINavigationControllerを介して)、ユーザが次のビューにナビゲートすると仮定しますユーザーが最初のビュー(viewFirstLoadまたは適切な関数)に戻ると、最初のビューにUIコンポーネントを表示してから再び初期化しますか?

あなたがこれをしないと、あなたがその特定のセッションであなたのアプリを使用している時間が長くなるにつれてメモリが増加し続けるようです。

これは許可されていませんか?ひんしゅくを買う?不可能?

+0

私はできると思いますが、ナビゲーション間でUIコンポーネントの割り当てを解除しないでください。しかし、あなたが大きなデータを持っていて、それに簡単にアクセスできるなら、私はおそらくビュー間で割り当てを解除/割り当てます。 – fatih

答えて

1

実際には、標準のUIViewControllerにその機能が組み込まれています。コントローラが表示されていないときに、そのビューがメモリから解放され、コントローラーの-viewDidUnloadメソッド内のすべてのサブビュー(IBOutlet参照によって保持されます) 。

コントローラーをもう一度表示する必要がある場合、コントローラーは再びそのビューをリロードします。

1

です。一般的に、経験則では、必要のないオブジェクトを解放する必要があります。あなたのビューが単なるビューであれば、はい、私はそれとそのすべてのサブビューをリリースします。ビューに長時間の取得プロセス(Webサービス呼び出しなど)で取得したデータがある場合は、データをどこかに保持して、ユーザーが戻ったときに戻って取得する必要はありません最初のビュー。

1

少し明確にする:Appleはビューに固有のデータを-viewDidLoadメソッドに表示することをお勧めします(ラベルにテキストを設定するなど)。次に、-viewDidUnloadで、-viewDidLoadで設定したビュー・オブジェクトを解放する(またはそのアウトレットを解放する)必要があります。ベースUIViewControllerコードは、ビューをアンロードして(したがって呼び出す-viewDidUnload)前に、サブクラスが実際に-viewDidLoadを実装しているかどうかをチェックするので、-viewDidLoadを実装することが重要です。 -viewDidLoadの実装に失敗すると、コントローラは後でビューを再作成できないと考え、メモリからビューをアンロードしません。私が知っている開発者は、この同じ問題を経験し、永遠に追跡しました。

関連する問題