2009-08-02 5 views
0

(ちょうどあなたが、私はinterfacaeビルダーせずに、iPhone用の開発を学んでいます知っている)iPhone開発 - マルチビューのApp遅延ロード

私はルートのViewControllerを持っている私の最初のマルチビューアプリを、コーディングだし、 2つの他のViewController、およびルートViewControllerはレイジーローディングを使用するため、viewDidLoadを実行すると最初のViewControllerが作成され、そのビューがサブビューに追加されます。しかし、2番目のものがロードされた後、アプリケーションが終了するまで(メモリ警告を受け取らない限り)、両方ともそこにとどまります。

ユーザーが2つの別のビューを切り替えると、削除されている別のビューをアンロードする必要があります(これをnilに設定すると、保持プロパティ)。したがって、ユーザがボタンをクリックするたびに、現在のビューコントローラはアンロードされ(スーパービューから削除された後)、次のビューコントローラがロードされ、サブビューとして追加されます。

これは適切なことですか、それとも正しいですか?アプリケーションには多くのビューがあり、これを正当化するのに十分な複雑さがないか、まったくそれを行うのが悪いですdidReceiveMemoryWarningはそれを処理します(didReceiveMemoryWarningでは、現在表示されていないviewcontrollerをnilに設定しています)?

答えて

1

答えは本当に依存しています。通常は、表示していないビューを解放してnilに設定する必要がありますが、ユーザーが頻繁に切り替える場合は、隠しビューを保持(キャッシュ)したままにしておくことができます。

あなたのアプリがdidReceiveMemoryWarningにユーザの携帯電話をプッシュすることを本当に望んではいません。その警告が表示されたら、iPhoneでキャッシュされたSafariページ、キャッシュされたUIImageViewオブジェクトなどをダンプしている間にアプリケーションがフリーズする可能性のあるその他のことが電話で発生しています。このプロセスはエンドユーザーとユーザーにとって目立つことがありますアプリケーションは、それほど滑らかではありません。

一部のユーザーは、3GSの余分なメモリを持たないように、第一世代のiPhone、iPod Touch、3Gsを使用している可能性があることを覚えておくことも重要です。

私はメモリを控えめにしていますので、ビューを解放して無効にしてから、ユーザーが見たいときに再インスタンス化します。 didReceiveMemoryWarningによるシステムのクリーンアップに対するビューの割り当ての影響は、通常、アプリケーションのユーザーにとってははるかに少なくなります。

+0

ありがとうございました。私はちょうどdidReceiveMemoryWarningがそれになっていればそれを世話することを意味しました、このアプリのようなことはできませんでした。 – mk12

+0

タブバーコントローラはどうでしょうで、書き換えないで表示されていないビューをアンロードするのはかなり難しいです。 – mk12

+0

viewDidDisappearを使用してビューを解放し、viewDidAppearを使用して再構築することができると思います。技術的には、あなたのUIViewController IMHOを保持するタブバーコントローラで最も効率的なメソッドになります。 –