我有一个包含以下视图的应用并查看转化。
查看1 - >查看2 - >查看3 - >查看4
在返回时,它可以查看1< - View 2< - View 3< - View 4 或查看1< - View 2< - View 4
基本上在视图4中,您可以转到视图3或查看2。 当应用关闭睡眠或用户离开应用时,它会加载到视图1上。
问题我有,我把每个视图作为自己的视图控制器。并通过以下方法调用。
TableViewSelect *tableviewselect = [[TableViewSelect alloc] initWithNibName:nil bundle:nil];
[self presentViewController: tableviewselect animated:YES completion:NULL];
这引发了一个问题,即新视图显示在旧视图的顶部,旧视图和其中的所有内存都未被释放。
我被告知我应该使用uinavigationcontroller而不是视图控制器。它是否正确?那么在理想世界中我应该如何添加视图?我想要的唯一问题是在离开视图时所有内存都被释放(例如nsmutablearray)。
由于
答案 0 :(得分:1)
如果您确实需要在离开时取消分配先前的控制器,那么您的方法和导航控制器方法都不会实现。一种方法是在需要更改控制器时更改窗口的根视图控制器,
TableViewSelect *tableviewselect = [[TableViewSelect alloc] initWithNibName:nil bundle:nil];
self.view.window.rootViewController = tableviewselect;
除非您的控制器使用大量内存,否则导航控制器方法可能会更好。它为您提供过渡(上述方式没有),以及一个易于向后的导航栏。
答案 1 :(得分:0)
UINavigationController将是您的最佳选择。 UINavigationController具有从导航" stack"中推送和弹出视图的方法。 (如果您不熟悉该术语,请查阅与计算机科学相关的堆栈)。根据用户想要通过视图的路径(他们将通过UI进行交互),您可以推送/弹出一定数量的视图,例如弹出两次到"跳过"在视图3。
当您收到应用程序正在关闭的通知时(根据您的实现和目标,这可以通过通知或查看循环方法,如viewWillUnload),您可以调用UINavigationController方法弹出堆栈的所有视图,从而回到你的第一个视图。祝你好运!