今天,在寻找一个讨厌的错误之后,我追踪了视图控制器被弹出的顺序,以防调用 PopToRootNavigationController。我很震惊。
假设我们有 3 个视图控制器
一个根)
B
C
如果我们在控制器 C 上调用 PopToRoot。从堆栈中移除的第一个控制器是 B,只有在移除 B 之后,控制器 C 才会被移除。
我的预期正好相反。最后一个被推送的是第一个被弹出的。
有人可以解释为什么苹果会选择这种行为吗?
谢谢
今天,在寻找一个讨厌的错误之后,我追踪了视图控制器被弹出的顺序,以防调用 PopToRootNavigationController。我很震惊。
假设我们有 3 个视图控制器
一个根)
B
C
如果我们在控制器 C 上调用 PopToRoot。从堆栈中移除的第一个控制器是 B,只有在移除 B 之后,控制器 C 才会被移除。
我的预期正好相反。最后一个被推送的是第一个被弹出的。
有人可以解释为什么苹果会选择这种行为吗?
谢谢
如果我没记错的话,这就是交易:
popToRootViewControllerAnimated:
弹出堆栈上除根视图控制器之外的所有视图控制器并更新显示。
但popViewControllerAnimated:
从导航堆栈中弹出顶视图控制器并更新显示。(在您的情况下,顶视图控制器将是 C 我猜)
希望这就是你要找的..
假设您在堆栈上有 100 个视图控制器并且您想要执行
popToRootViewControllerAnimated:
所以一个一个地弹出每个视图控制器直到到达最后一个视图控制器是没有意义的..因为你期望它一个一个地释放每个对象,这需要时间..所以 ios 所做的是,它只是弹出到最后一个视图控制器并释放第二个视图控制器。因此,一旦 2nd 被释放,其所有后续子对象也会被释放,因此速度更快(我猜它适用于堆系统)。
当你弹出它喜欢的地方。
popToViewController:animated:
弹出视图控制器,直到指定的视图控制器位于导航堆栈的顶部。
希望这可以清除一些空气..