2011-01-11 6 views
0

私は、UITableViewを生成するために使用される配列を持っています。Iphone:dataSourceのメモリを割り当てる場所は?

質問はどこに私はそれのためのメモリを割り当てる必要があります。 viewDidLoadまたはviewWillAppearに2つのオプションがありますが、メモリ管理の観点からはどこが効率的かわかりません。

おかげ

編集:

私は次のことをやってビューを作成します。

NextViewController *nextController = [[ReservationsViewController alloc] initWithNibName:@"NextViewController" bundle:nil]; 
nextController.managedObjectContext = self.managedObjectContext; 
[self.navigationController pushViewController:nextController animated:YES]; 
[nextController release]; 

しかし、私はすべての時間が表示されているメモリを割り当てたくない、初回のみ表示メモリ管理の観点から正しいものになるようにロードされる。

+0

アレイの割り当て先はどこですか?それは財産ですか? –

+0

はいそれはプロパティです – xger86x

答えて

1

一度だけ割り当てたい場合は、View Controllerの作成方法に応じて、initメソッドまたはawakeFromNibのいずれかに割り当てる必要があります。

viewWillAppearはおそらく複数回呼び出され、viewDidLoadは1回だけ呼び出されるとは限りません。

+0

私は私の質問を編集します。私はviewwillAppearまたはviewDidLoadで割り当てる場合、私はメモリをリークしたくないです。だから正しい方法は何ですか? – xger86x

+0

initWithNibNameメソッドをオーバーライドし、そこに配置します。 – Ben

0

配列が財産である場合は、単にそのようにdeallocでそれを解放:あなたはのviewDidLoadまたはviewWillAppearメソッド内のローカル配列を作成するに切り替える何らかの理由であなたはできるだけ早くそれを解放してください場合は

- (void)dealloc { 
    [someArray release]; 
    [super dealloc]; 
} 

あなたがそれで済むように。

0

メモリをviewDidLoadメソッドに割り当てると、ビューがメモリにロードされたときにのみメモリが割り当てられます。 viewWillAppearでこれを行うと、ビューが表示されるたびにこれが実行されます。

+0

しかし、viewDidLoadは一度だけ呼び出される保証はありませんか? – xger86x

+0

ビューをどのように管理しているかによって異なります。ドキュメンテーションに記載されているように、メモリにロードされるたびに呼び出されます。アプリライフサイクルでビューのインスタンスが1つしかなく、このインスタンスのみをプッシュ/ポップすると、一度呼び出されます。 – federivo