2011-07-05 20 views
1

メモリの使用量は、iPhoneプログラミングの際に注意する必要がある主なものの1つです。一般的なパターンは、viewWillLoadでサブビューやラベルなどを作成し、viewWillUnloadでnilに設定することです。私はこれの背後にある理由を理解しています。iPhone:viewWillDisappearで割り当てを解除し、viewWillAppearで割り当てを行うのはなぜですか?

しかし、viewWillUnloadではなく、viewWillDisappearですべてを構成するのに時間がかかっていたものを除いて、何も設定しないのはなぜですか?

ビューが消えると、実際にはUIアイテムにメモリを割り当てる必要はありません。ビューが再び表示されたら、UIアイテムを再度作成できます。

あなたは私が今説明したことを行うことができます...私はそれが完全に可能であることを知っていますが、私の質問はこれが共通のパターンではないのですか?

新しいメモリを割り当てるには隠れたコストがかかりますか?それは奇妙な行動を引き起こすでしょうか?それは単に不要ですか?

答えて

1
  1. 一般的なパターンは、このパターンのための十分な理由がパフォーマンスで実際にviewDidLoadviewDidUnload
  2. です。 UINavigationControllerが使用され、ビューが消えるとすぐに再び表示されないというわけではありません。したがって、メモリが問題ではなく、毎回ユーザーの状態を再作成する必要がある場合(データのフェッチ、スイッチの設定、セグメント化されたコントロールの設定など)には、すべてをアンロードする必要があります。メモリはデバイス上でも重要ですが、パフォーマンスもそうですが、誰も「遅れた」UIを使用することはありません。 -(void)viewDidLoad,-(void)viewDidUnload、および- (void)didReceiveMemoryWarningを正しく使用することで、メモリとパフォーマンスを最大限に高めることができます。
+0

viewWillDisappearで割り当てを解除してパフォーマンスが低下しても、非常に無視された場合はどうなりますか?それはまだそれを行う価値がありますか? –

0

まあ、モデルビューコントローラーを表示していると、そのビューがアンロードされ、そのビューを遅く戻すことになります。これは、とviewWillDisappear(またはviewDidDisappear)ではなくviewDidLoadviewDidUnloadが使用されているものです。

オブジェクトの割り当てが遅いため、必要なときに行う必要があります。

viewDidLoadviewDidUnloadは自動的に表示され、表示されなくなり、システムはより多くのメモリを必要とします。 これは、たとえば、システムによってapplicationDidReceiveMemoryWarningが呼び出された後、UINavigationControllerがスタック内のすべてのビューをアンロードしますが、viewControllerはアンロードしない場合に発生します。これにより、ビューがアンロードされたときのどの状態にも簡単に戻ることができます。

関連する問題