我想在不使用pushviewController机制之类的导航控制器的情况下实现视图转换。所以,我创建了如下的视图层次结构。 窗口是superview,包含三个子视图。
[window] - aViewController - bViewController - cViewController
如果我想从cViewController返回aVewiController,我只需再次分配aViewController:[[aViewController alloc] init]
。
然后,在4次循环之后,我得到didReceiveMemoryWarning
和“程序已退出状态值:0”消息。它显然是内存问题,但没有内存泄漏。一遍又一遍地分配视图控制器是一个问题。在这种情况下,我不知道如何转换视图。
答案 0 :(得分:1)
如果您希望UIViewControllers的层次结构与UINavigationController案例中的行为相同,那么
A)通过此调用显示您的新ViewController
//This code should be implemented in viewControllerA
[self presentModalViewController:viewControllerB animated:YES]
B)通过调用
返回一步//This code should be implemented in viewControllerA
[self dismissModalViewControllerAnimated:YES]
注意:告诉viewControllerA你要关闭viewControllerB的方法是发送一个NSNotification。关于这一点的好处是,如果你想从viewControllerC转到viewControllerA,你只需向viewControlerA发送一个通知给dissmisModalViewController,它将以递归方式为你解除viewControllerC和viewControllerB。
希望这有帮助
答案 1 :(得分:0)
您应该只分配一次,并通过隐藏/取消隐藏它们来在视图之间进行转换:
viewController.view.hidden = YES / NO;
答案 2 :(得分:0)
在将对象添加到超级视图后,您需要确保释放对象。并确保在屏幕上发送时将它们从超级视图中删除....
如果要重用该对象,则可以将它们保存在列表中,并尝试将它们像表视图一样出列。这样你每次都不必重新制作它们。
如果将它们添加到子视图中,则永远不要删除它们。那么你将拥有多个不再使用的视图,这些视图仍然被超级视图引用。因此他们仍将留在记忆中。