2012-01-16 13 views
2

iOS開発を始めて以来、この質問は私の心に残っていました。UINavigationControllerとメモリの使い方です。メモリ使用量:いつUINavigationControllerを使用するのが理にかなっていますか?

私は、UINavigationControllerが理にかなっているiMail、Find Friends、Notesなどのアプリをたくさん見ています。それらを使用すると、2つまたは3つのレベルの階層をドリルダウンすることができます。

しかし、あなたのMacのファイルシステムのように、ルートフォルダから深い階層を参照することを想像してください。 私がUINavigationControllerを使用した場合、スタックに何百ものコントローラを格納し続けます(最悪の場合)。私はそれを良い使い方とは考えていません。押し込まれたコントローラーが(メモリに関する限り)非常に重くなり、何もない状態で座っていることがあります。

UINavigationControllerの「動的」バージョンがあったらいいと思います。階層をポップアップするのではなく、階層をバックアップするときに何を作成するか教えてくれるだけです。

質問:UINavigationControllerは深い階層で使用されていますか?すべてのアニメーション、バーアイテムなどが必要な場合は、良い選択肢は何ですか? または、問題がない場合は表示されますか?

答えて

1

UINavigationControllerは、です。メモリが不足すると、表示されていない階層の部分で使用されているメモリを解放することができます。これはメモリ不足が発生した場合の手作業であり、OSは自動的に同じ状況でビューを解放します。

トップビューコントローラがスタックからポップされると、viewDidLoadメソッドが呼び出され、ビューを再作成できます。

実際に問題が発生した場合、iOS5では独自の「コンテナ」ビューを作成できるため、提案した通りの独自のナビゲーションコントローラを作成できます。 UIViewControllerドキュメントの「コンテナビューコントローラの実装」を参照してください。

非常に深い階層で作業するために、いくつかのショートカットを追加する必要があるかもしれません。あなたは一度に1つの画面に戻ることができれば、UIは痛いかもしれません。

+0

しかし、コントローラのスタックにぶら下がっているUIViewControllerインスタンスはどれくらい重いですか?ビューを含むすべての可能なデータをリリースしても、残っているものはまだあります。または、これらのビューバイトについて議論する価値はありませんか? – Krumelur

+0

これはあなたのプロパティ/メンバ変数と、もう少し "隠された"変数オーバーヘッドになります。それは非ゼロですが、それは巨大ではありません。 –

+0

独自のUINavigationControllerを作成する方法についても編集してください。 –

関連する問題