0

ナビゲーション スタックに 4 つの画面 (A、B、C、D) を持つ単純なアプリを考えてみましょう。ナビゲーションは、A -> B -> C -> D のアルファベット順に並べられています。

そのような状況では、別のビュー コントローラーを表示するメンバー変数を作成するのに慣れています。私の例では、A は B への参照、B は C へ、C は D への参照を保持します。

これらの参照は、オーナー コントローラが解放されるまでメモリに保持されます。このアプローチを使用して、コントローラーの作成を最小限に抑え、以前に表示された画面を表示するときに最適化を行います。

しかし、各コントローラーを保持せずに、必要なたびに作成して自動解放する方が良いかどうかはわかりません。より多くの作品が作成されますが、一部の時間に使用されるメモリは少なくなります。

より良いアプローチは何ですか?

4

3 に答える 3

1

最良の方法は使用UINavigationControllerです。このクラスは、View Controller を操作するための一連のメソッドを提供します。プッシュやポップなど、スタックを操作する最も簡単な方法や、さらに複雑な方法がいくつかあります。たとえば、スタック内のすべてのコントローラーの配列を取得し、必要に応じてコントローラーの並べ替え/削除/コントローラーの追加/... を行い、この配列をプッシュします。このメカニズムにより、必要なすべてのことを実行できるようになります。

私の意見では、他のコントローラーへの保存参照は正しくありません。新しいコントローラーを作成します。これは安価な操作であり、それほど時間はかかりません。コントローラーの初期化中にデータ データを作成/取得する場合は、モデル レベルを再設計するだけです (データを保存したい場合は、単純にリリースしないでください)。

それが役に立てば幸い。

于 2012-08-06T12:06:24.560 に答える
0

UINavigationControllerCに戻ったときにビューの情報を保持しますB。もう一度押すときはC、 かどうかを確認してくださいnil。nil でない場合は、古い方をプッシュします。これは良いアプローチであり、アプリのどの側面にも影響しません。Cの変更により、 の値を変更する必要がある場合は面倒ですB

于 2012-08-06T12:24:54.893 に答える
0

より良いアプローチは、View Controller に次のものを保持させないことです。UINavigationControllerスタックに追加されたすべてのView Controllerを自動的に保持するため、保持する必要はありません。しかし、既に同じスタックにある初期化済みのビュー コントローラーをスタックにプッシュしようとすると、驚くべきクラッシュや例外が発生します。

于 2012-08-06T10:58:05.463 に答える