1

テーブルビューのナビゲーションコントローラーがあります。私が読んだほとんどのチュートリアルでは、通常、テーブルビューコントローラー(またはのサブクラス)の配列がテーブルビューコントローラーにローカルに格納されており、テーブルセルが選択されたときにナビゲーションスタックにプッシュするために使用されます。

私の現在のプロジェクトでは、XMLファイルからロードされる多くのデータがあります。このデータは、シングルトンクラスの中心に保持されます。よろしければ、これが私の「モデル」です。

そのため、テーブルビューコントローラーにはビューコントローラーの配列がありません(ビューコントローラーに冗長データが既に保存されている場合は、そのデータを保存したくありませんでした)。代わりに、シングルトンからデータにアクセスしてView Controllerを作成し、適切なデータで初期化してから、テーブルセルが選択されるたびにそれをナビゲーションスタックにプッシュします。

これは、tableview:didselectrowatindexpath:メソッドのサンプルです。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    DetailViewController *nextController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];

    // Here I setup some data from the singleton (just an example)
    nextController.title = [mySingleton.titles objectAtIndex:[indexPath row]];

    [self.navigationController pushViewController:nextController animated:YES]; 

    [nextController release];
}

だから私の質問は、このアプローチはパフォーマンスの低下を被る可能性があるのでしょうか?ユーザーがテーブルセルを選択するたびにメモリを割り当てたり解放したりするのが心配です。一方、私は潜在的に大量のデータを持っているので、コントローラーの配列に格納することによってこのデータを繰り返す必要はありません。

生データだけでなく、いつでもシングルトンにView Controllerを準備させ、それらを保存させることができました。しかし、モデルが常にコントローラーに暗黙的に含まれているのは少し奇妙だと思います。コントローラの知識とは関係なくモデルを保存する適切な方法はありますか?

この状況にどのようにアプローチしますか?

前もって感謝します。

4

1 に答える 1

1

あなたのアプローチは正しいです。このコード行では:

nextController.title = [mySingleton.titles objectAtIndex:[indexPath row]];

データを「割り当てて解放」するのではなく、ポインターのデータを解放します。nextController.title内のいくつかの要素を指しmySingleton.titlesます。copy配列でメソッドを呼び出さない限り、データはシングルトンのクラス内にのみ存在します。

于 2010-07-11T11:24:46.437 に答える