【问题标题】:Navigation Controller: Storing controllers vs models导航控制器:存储控制器与模型
【发布时间】:2010-05-25 20:12:29
【问题描述】:

我有一个带有表格视图的导航控制器。在我读取的大多数教程中,他们通常有一系列视图控制器(或子类)在表视图控制器中存储的视图控制器(或子类),它们在选择表格单元格时使用以推送到导航堆栈。

在我当前的项目中,我有很多从 XML 文件加载的数据。这些数据集中保存在单例类中。如果你愿意,这是我的“模型”。

因此,在我的 tableview 控制器中,我没有视图控制器数组(我不想在视图控制器中存储冗余数据,因为它已经存储在其他地方)。相反,我从单例中访问数据并创建一个视图控制器,使用适当的数据对其进行初始化,然后在每次选择表格单元格时将其推送到导航堆栈。

这是 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];
}

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

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

你会如何处理这种情况?

提前致谢。

【问题讨论】:

    标签: iphone model-view-controller uitableview navigationcontroller


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-09-15
      • 2020-07-14
      • 2018-01-06
      • 2017-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多