从堆栈中删除ViewControllers

时间:2015-02-15 18:15:57

标签: ios objective-c uiviewcontroller stack modalviewcontroller

我有一个viewController(我们称之为VC1),它在应用程序启动时显示,它有一个打开modalVC的菜单按钮,在modalVC中有三个按钮打开VC1,VC2,VC3(在VC2,VC3也是有这个菜单按钮)

我运行我的应用程序(在VC1上),我按下菜单按钮(modalVC),打开VC1。

事实证明我现在有两个VC1打开?因为每次按下VC1,都会被添加到1-2 MB的内存中。如何从内存中删除它们?

选择控制器菜单(modalVC)之后必须以某种方式删除之前的所有内容..how?

从VC1,VC2,VC3上的菜单转换: UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController:VC1]; [self presentViewController:navController animated:YES completion:nil];

如果我按下菜单按钮并始终选择VC2(10次会这样做)应用程序将减慢

我在菜单中选择VC(modalVC)后尝试了这个

NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: self.navigationController.viewControllers];
[allViewControllers removeAllObjects];
self.navigationController.viewControllers = allViewControllers;

1 个答案:

答案 0 :(得分:0)

您的菜单实施存在设计缺陷。每当用户点击按钮时,您就会创建每个ViewController的新实例,而不是使用之前创建的按钮。应该使用ViewController Containment实现这样的菜单。这样,容器ViewController将在需要时创建VC1 VC2和VC3,如果它们已经存在则不会重新创建它们。

要了解您将如何做到这一点,请阅读Apple docs中的“实现自定义容器视图控制器”一节