如何在iPhone深入分析应用程序中处理无限量的TableViews

时间:2009-12-31 03:47:32

标签: iphone objective-c uinavigationcontroller uitableview

我创建了一个UITableViewController子类。我只需要一个控制器吗?我只是实例化那个子类的多个实例吗?

我正在构建的iPhone应用程序将从一个人员列表开始。如果用户点击一个人,新表将被推入他们为之工作的公司列表。如果用户然后点击公司,他们将看到工作职位列表。如果他们点击一个位置,他们就会看到一个持有这些职位的人员名单。 这可以永远持续下去,用户可以随时备份列表。

App Delegate实例化导航控制器和表视图控制器,然后将其推送到导航控制器。但是当用户点击一行时,现在TVC正在创建另一个TVC。

  1. 是对还是应该 AppDelegate将实例化所有 TVC的?或者它是否有效 他们都被推到了Nav上 控制器无论如何?

  2. 每个Table View实例 需要有不同的名字或者可以 他们都被称为'mainTVC'或 类似的东西?

    tableViewController *mainTVC = [[tableViewController alloc] init];
    
  3. 我不会用完内存吗?我 需要开始删除表视图 当他们距离2或3级时 当前,然后重新创建它 用户备份到它?

4 个答案:

答案 0 :(得分:3)

无需创建多个TableView,我过去所做的只是重新绑定到不同的数据源。所以保留一个TableView并为人们,公司等提供数据源......

答案 1 :(得分:1)

选项编号(2)看起来不错。在内存成为问题之前,您可以将相当多的视图控制器压入堆栈。系统将清理didReceiveMemoryWarning:方法中的大多数重量级内存(即视图)。如果你正在创建大量的内存结构,你可能想要在那个方法中清理它们(确保调用继承的方法)。

答案 2 :(得分:1)

我会为每种类型创建一个视图控制器。据推测,您可能希望拥有特殊的显示特性,如自定义的tableview单元格,以便与人们的名字略有不同地显示作业位置。

除此之外,@ Ben Gottlieb的回答应该会很好。使用大量视图控制器并处理didReceiveMemoryWarning:方法。

还有一件事,如果用户向下钻取到你想说它们永远不会一直回来(有点像有一个撤销堆栈),你可以使用setViewControllers:animated: {{1}将堆栈重置为一定大小的方法(比如15实现'撤消缓冲区'为15)。使用此方法,您可以确保第一个视图控制器始终是您的根视图控制器,其余的都是向下钻取实例。

答案 3 :(得分:1)

要回答你的第三个问题,只要你的内存中没有庞大的数据存储,内存应该不是问题。你不应该在任何情况下“丢弃”tableviews - 这会导致崩溃(并且无论如何也无法对导航堆栈进行非FILO添加/删除)。在内存压力下,你应该只释放像缓存这样的“非必要”项目。但是,这应该不是问题。

此外,如果您的级别超过3个,则可能需要重新考虑您的UI。如果用户向下钻取10个级别,那么导回堆栈将非常繁琐。