解除展示的视图控制器

3

我正在使用ARC + Storyboard。

我没有使用segues或UINavigationController,而是使用以下方式展示每个单独的视图:

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
SecondViewController *secondViewController = [storyBoard instantiateViewControllerWithIdentifier:@"SecondVC"];

[self presentViewController:secondViewController animated:YES completion:nil];

我的应用程序的典型流程是:

MainViewController presentViewController: SecondViewController presentViewController: ThirdViewController ...等等

在向前移动之后,我不希望之前呈现的视图控制器仍然停留在内存中。

目前,在进入第二个视图控制器后,我可以在MainViewController的定时器函数中设置一个断点,并验证所有内容是否仍然存在。

3个回答

0

也许这会有所帮助。

[viewController.view removeFromSuperview];

我在这里找到了它:如何关闭视图?


0

注意:在使用presentViewController:时,视图控制器会被自动保留,但在ARC中,它会处理保留的对象,并在适当的时候释放它。

稍后调用dismissModalViewController自动释放保留的控制器


0

只有我觉得可能是我没有正确阅读吗?似乎对于所呈现和呈现的视图控制器存在误解?

如果您的MainViewController在顶部,然后您调用: [mainViewController presentViewController:secondVC animated:YES completion:nil]; 那么secondVC就成为了被呈现的控制器,而mainViewController则成为其呈现的视图控制器。


话虽如此,看起来你想让你的呈现视图控制器从内存中卸载?

“现在,在我进入第二个视图控制器之后,我可以在MainViewController的计时器函数中设置断点,并验证一切是否仍然存在。”

如果是这样,那么当以这种方式呈现时,视图控制器的行为并不完全是这样的。直到它收到内存警告通知,presentingViewController才会保留在内存中,然后仅在其不在顶部时卸载其视图。(控制器对象本身仍然活着)。

简单地释放呈现控制器并不是一个好主意,因为它会破坏控制器之间的父子关系。您可以手动修复此问题,但在某些情况下可能有点麻烦。只有在您知道自己在做什么时才建议使用。

如果您真的想杀死presentingViewController,可能最好您创建一个额外的自定义容器视图控制器,以便它呈现视图控制器并释放前一个视图控制器。视图控制器并不昂贵,它的视图才是昂贵的 :)

请注意,即使您使用导航控制器,关于加载/卸载其视图的行为也将类似。只有视图被卸载,因为导航控制器会保留其所有视图控制器。

是的,我认为你理解我的意思了。我也完全理解呈现视图控制器和呈现的视图控制器。我只是在寻找一种真正销毁呈现视图控制器的方法。我的应用程序根据计时器执行动画,并加载多个大型数据图像到内存中。一旦我更改视图,我不希望那些操作在幕后被触发。 - Adam Johnson
作为一种解决方法,我只是阻止在呈现新的VC之后调用我的计时器函数,但我仍然担心每个屏幕上加载的大型图像。我不希望出现负面的性能影响。 - Adam Johnson
你可以在呈现其他视图控制器并在顶部时手动卸载所有大型图像,然后在返回时再手动重新加载它们。 - nacho4d
你是在建议我做一些像遍历所有视图并将它们删除的事情吗?就像这样:for (UIView *view in self.view.subviews) { [view removeFromSuperview]; } - Adam Johnson
请确保正确实现viewDidUnload和/或viewControllerDidReceiveMemoryWarning方法。您可以在这里编写代码来卸载视图/数据,当内存需要时它们将被调用。UIViewController会非常好地处理这些情况:)。这是iOS的必读资料,View Controller Programming Guide for iOS http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html - nacho4d

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接