我创建了一个UITableViewController子类。我只需要一个控制器吗?我只是实例化那个子类的多个实例吗?
我正在构建的iPhone应用程序将从一个人员列表开始。如果用户点击一个人,新表将被推入他们为之工作的公司列表。如果用户然后点击公司,他们将看到工作职位列表。如果他们点击一个位置,他们就会看到一个持有这些职位的人员名单。 这可以永远持续下去,用户可以随时备份列表。
App Delegate实例化导航控制器和表视图控制器,然后将其推送到导航控制器。但是当用户点击一行时,现在TVC正在创建另一个TVC。
是对还是应该 AppDelegate将实例化所有 TVC的?或者它是否有效 他们都被推到了Nav上 控制器无论如何?
每个Table View实例 需要有不同的名字或者可以 他们都被称为'mainTVC'或 类似的东西?
tableViewController *mainTVC = [[tableViewController alloc] init];
我不会用完内存吗?我 需要开始删除表视图 当他们距离2或3级时 当前,然后重新创建它 用户备份到它?
答案 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个级别,那么导回堆栈将非常繁琐。