如果我不在 iOS 中展开 Segue 会怎样?
What happens if I dont Unwind a Segue in iOS?
我有一个应用程序,其中有超过 10 个 ViewControllers
,并且有一个 MenuViewController
由所有 ViewControllers
触发。并且 MenuViewController
触发全部 ViewControllers
。所以在应用程序中,我不会解除 Segue,而是继续触发 segue。
方案:
它会产生内存不足或应用程序挂起之类的副作用吗?
如果我在不展开它们的情况下继续触发 segues 会好吗?
有人帮忙吗???
如果您不断在导航堆栈上推送新的视图控制器而不删除之前的视图控制器,您最终会 运行 内存不足。如果你永远不想返回到以前的视图控制器,你可以在每个视图控制器 viewDidAppear::
中的推送转换完成后删除完整的导航历史记录
- (void)viewDidAppear {
[super viewDidAppear];
self.navigationController.viewControllers = @[self];
}
或者,您可以通过设置导航控制器的委托并实现 navigationController:didShowViewController:animated::
将此逻辑置于中心位置
- (void)navigationController:(UINavigationController *)navigationController
didShowViewController:(UIViewController *)viewController
animated:(BOOL)animated {
navigationController.viewControllers = @[navigationController.viewControllers.lastObject];
}
我有一个应用程序,其中有超过 10 个 ViewControllers
,并且有一个 MenuViewController
由所有 ViewControllers
触发。并且 MenuViewController
触发全部 ViewControllers
。所以在应用程序中,我不会解除 Segue,而是继续触发 segue。
方案:
它会产生内存不足或应用程序挂起之类的副作用吗? 如果我在不展开它们的情况下继续触发 segues 会好吗?
有人帮忙吗???
如果您不断在导航堆栈上推送新的视图控制器而不删除之前的视图控制器,您最终会 运行 内存不足。如果你永远不想返回到以前的视图控制器,你可以在每个视图控制器 viewDidAppear::
中的推送转换完成后删除完整的导航历史记录- (void)viewDidAppear {
[super viewDidAppear];
self.navigationController.viewControllers = @[self];
}
或者,您可以通过设置导航控制器的委托并实现 navigationController:didShowViewController:animated::
将此逻辑置于中心位置- (void)navigationController:(UINavigationController *)navigationController
didShowViewController:(UIViewController *)viewController
animated:(BOOL)animated {
navigationController.viewControllers = @[navigationController.viewControllers.lastObject];
}