2011-02-02 17 views
0

コントローラが2つある場合は、リストとディテールコントローラー、これら2つのコントローラーのメモリー管理を処理する正しい方法は何ですか?リストおよび詳細コントローラ

私は、どのような時点でそれらを呼び出す必要があるのですか?

また、リストコントローラが動的である(データがext Webサービスから呼び出される)場合、詳細コントローラにデータが渡されます。詳細コントローラでデータを取得/表示するコードを書き込む必要があります。私はviewDidLoadまたはviewWillAppearする必要がありますか?

いずれの例も優れています。

答えて

0

単一の答えはありません。しかし、私の答えは.... viewWillAppear

ほとんど使用されていない詳細ビューを取る。だから多分あなたはそれが使用されるたびに作成し、毎回それを破壊することにします。

頻繁に使用される可能性のある別の詳細図を参照してください。あなたはそれを一度作成して再使用することに決めました。たぶん、メモリ不足の警告でそれを破壊し、次回の使用時に再作成することさえできます。この場合、毎回viewDidLoadが呼び出されることに依存することはできません

を使用するviewWillAppearを使用すると、コードがより一貫して、詳細ビューが期待以上に多く呼び出されていることがわかります。私はそれを毎回作成するのではなく、それを再利用するべきです。

いつそれらを放つべきか...それは本当にどのような視点にかかっています。どのくらいの頻度で使用されていますか?単純に存在するにはどれくらいのメモリが必要ですか?再作成するにはどれくらいの時間がかかりますか?私の経験から

+0

viewDidLoadの場合(ユーザーがLC&DCの間を前後にナビゲートするとき)、毎回呼び出されるviewDidLoadか、時間差がある場合はありますか? – testndtv

0

、詳細ビューコントローラをistantiateする最良の方法は次のとおりです。anObjectはあなたが詳細ビューコントローラに提示したいあなたのダウンロードしたデータの一部である

MyDetailController * dc = [[MyDetailController alloc] initWithMyObject: anObject]; 
[self.navigationController pushViewController: dc animated: YES]; 
[dc release]; 

私はあなたのリストコントローラは、次のようにインスタンス化する必要がありますあなたのアプリの主なものであると仮定します。

- (BOOL) application: (UIApplication *) application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions { 
_baseWindow = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]]; 
_listVC = [MyListController new]; 
[_baseWindow addSubview: _listVC.view]; 
[_baseWindow makeKeyAndVisible]; 
return YES; 
} 

そしてリリース:

- (void) dealloc { 
[_listVC release]; _listVC = nil; 
[_baseWindow release]; _baseWindow = nil; 
[super dealloc]; 
} 

は-viewDidLoadが-loadView後に呼び出されることに注意してください誰かがビューコントローラの-viewプロパティにアクセスしようとしたときに呼び出されます。

したがって、-viewDidLoadでビューを準備し、-viewWillAppearまたは-viewDidAppearでいくつかの追加タスクを実行することができます。 -viewWillAppear(および同様のメソッド)は、ビューコントローラのビューが画面に表示される、EVERY TIMEと呼ばれます。つまり、たとえば、詳細VCから別のVCをプッシュしてポップすると、-viewDidAppearが再び呼び出されます。

関連する問題