导航控制器:存储控制器与模型

时间:2010-05-25 20:12:30

标签: iphone model-view-controller uitableview navigationcontroller

我有一个带有桌面视图的导航控制器。在我读过的大多数教程中,他们通常在表视图控制器中本地存储了一组视图控制器(或子类),用于在选择表格单元格时将其推送到导航堆栈。

在我当前的项目中,我有很多从XML文件加载的数据。这些数据保存在单个类中。如果你愿意的话,这就是我的'模特'。

所以在我的tableview控制器中,我没有一个视图控制器阵列(当我的视图控制器已经存储在别处时,我不希望将冗余数据存储在我的视图控制器中)。相反,我从单例中访问数据并创建一个视图控制器,使用适当的数据对其进行初始化,然后在每次选择表格单元格时将其推送到导航堆栈。

这是tableview的示例:didselectrowatindexpath:method:

- (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];
}

所以我的问题是这种方法是否有可能遭受性能损失?每次用户选择表格单元格时,我都担心分配和释放内存。另一方面,由于我可能会拥有大量数据,因此我不想通过将其存储在控制器数组中来重复此数据。

我总是可以让我的单身人士准备视图控制器并存储它们而不仅仅是原始数据。但我觉得模型总是隐含在控制器中有点奇怪。是否存在使模型独立于控制器知识存储的正确方法?

你会如何处理这种情况?

提前致谢。

1 个答案:

答案 0 :(得分:1)

你的方法是对的。 在这行代码中:

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

你不是“分配和释放”任何数据,而是指针的数据。 nextController.title会指向mySingleton.titles内的某个元素。只要您不在数组上调用任何copy方法,数据就只存在于单例类中。