根本的问题是"多少UIViewControllers你可以推导航叠?"存储器而不引起警告或赚取个看门狗终止。

假设我有一个应用程序,基本上是一个数据库,用于三个实体里的每一个可能具有的关系与某一其他实体的关系是显示在一个UIViewController.用户可以按照这些关系和每一个人带来了一个新的控制-如果该实体是A、B和C->B>C->B>C->的一个然后每一种观点是在堆的两倍。我了解如何推动和流行,如何推回到一个特定的控制器,并且我认为,而不仅仅是扩大导航叠无限期它可能是最好的复用图控制器在导航叠。

要做到这一点,每次我想要一个FirstEntityViewController我可以扫描导航堆找一个对象 [self isKindOfClass:[FirstEntityViewController class]]; 然后调的方法设计用于重组的这一观点,为什么我目前想要看到的-只是刷新的数据相同的方式做时重复使用一个用表.

这是好的,除了它的效果可能具有的NavigationController.如果我用 UINavigationController:popToViewController:animated: 我认为这是要放弃一切上述看我弹出来,包括查看其中的用户希望找到在攻"返回"的。因此,用户水龙头关系,水龙头回去"吧?"

如果我删除了匹配的控制器从导航叠,然后把它上到顶部的堆后面的行为仍然是确定用户只要不回去作为实例的FirstEntityViewController移或其他再次航行将会似乎不一致。

是正确的解决方案,以消除控制器从堆,并以某种方式保持在一个地方堆以便当重复使用的控制器弹出它可以被替换回来它是从哪里来的?我应该维护我自己的名单的图样和数据显示,以便当出现,我可以替代的景下看出来,呆一步提前回来导航?

或是只是太过复杂?没有必要,甚至担心这种情况因为操作系统使用的许多图控制器同样的方式作为UITableViewCells都是重复使用,并没有真正的存储器或性能的影响,具有50-深导航叠?

有帮助吗?

解决方案

ViewController实例保持在UINavigationController的堆,但是,任何看除了俯视可以被卸载,在任何时间(图控制器是通过的 viewDidUnload 消息)。

换句话说,景下俯视不挂周围,并最终将卸在内存条件,因此没有必要为你要尝试重新使用你的图控制器。

其他提示

上次我检查,你不能推viewcontroller,已经在一navcontroller堆回到它了。你必须创造一个新的viewcontroller并将它推到叠和每个后按钮会弹出一个关栈。最好你可以做的是让一个高速缓存的viewcontrollers和救济他们需要的--只要他们弹出navcontroller堆。但它可能不会买你如通过存储器节省。

UITableViews是一位不同在于,只有相对少数的细胞视在任何给定的时间,并尽快小区去屏幕外,它删除,并返回到游泳池。如果你可以保证maxdepth你链是固定的,然后你可以拉一个类似的窗口方案。如果不是,你可能必须坚持下去深和保持警惕,关于解除记忆为很快,你可以。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top