gpt4 book ai didi

iPhone - UINavigationController,重用 View ?

转载 作者:行者123 更新时间:2023-12-03 19:43:06 26 4
gpt4 key购买 nike

根本问题是“你可以在导航堆栈上推送多少个 UIViewController?”不会导致内存警告或导致看门狗终止。

假设我有一个应用程序,它基本上是三个实体的数据库,其中每个实体都可以与其他实体建立关系,并且该关系显示在 UIViewController 上。用户可以遵循这些关系,每个 View 都会调出一个新的 Controller - 如果实体是 A、B 和 C,并且 A->B->C->B->C->A,则每种 View 在堆栈中出现两次。我了解如何推送和弹出,如何推送回特定 Controller ,并且我认为最好在导航堆栈中重用 View Controller ,而不是无限期地扩展导航堆栈。

为此,每次我想要 FirstEntityViewController 时,我都可以扫描导航堆栈以查找 [self isKindOfClass:[FirstEntityViewController class]]; 的对象,然后调用旨在重新调整该 View 的方法对于我当前想要看到的内容 - 只需以与重用 UITableViewCell 时相同的方式刷新数据即可。

除了可能对 NavigationController 产生的影响之外,这很好。如果我使用 UINavigationController:popToViewController:animated: ,我认为它将丢弃我要弹出的 View 上方的所有内容,包括用户希望在导航中点击“后退”时找到的 View 酒吧。因此,用户点击一个关系,点击返回,然后“嗯?”

如果我从导航堆栈中删除匹配的 Controller ,然后将其弹出到堆栈顶部,只要用户不返回到已移动的 FirstEntityViewController 实例或否则导航又会显得不一致。

从堆栈中删除 Controller 并以某种方式在堆栈中保留一个位置,以便在弹出重用 Controller 时可以将其替换回原来的位置,这是正确的解决方案吗?我是否应该维护自己的 View 类型和数据显示列表,以便在弹出时我可以替换即将弹出的 View 下方的 View ,从而在后退导航之前保持一步?

还是这变得太复杂了?是否不需要担心这种情况,因为操作系统以与重用 UITableViewCell 相同的方式重用大部分 View Controller ,并且拥有 50 深的导航堆栈不会对实际内存或性能产生影响?

最佳答案

ViewController 实例保留在 UINavigationController 的堆栈中,但除顶 View 之外的任何 View 都可以随时卸载(通过 viewDidUnload 消息通知 View Controller )。

换句话说,顶 View 下面的 View 不会挂起,最终会在内存不足的情况下被卸载,因此您无需尝试重​​新使用 View Controller 。

关于iPhone - UINavigationController,重用 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1623271/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com