从内存中删除视图控制器?

Posted

技术标签:

【中文标题】从内存中删除视图控制器?【英文标题】:Remove View Controller from memory? 【发布时间】:2011-08-07 07:17:48 【问题描述】:

我似乎很难找到这个问题的答案。

我的应用程序使用以下代码加载视图控制器:

World_Pick *world_pick = [[World_Pick alloc] initWithNibName:@"World Pick" 
bundle:nil];

world_pick.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:world_pick animated:YES];

[world_pick release];

问题是之前的视图没有从内存中释放,只是添加到它上面。我尝试过类似的东西

[self.view removeFromSubview];
[viewController release];
ViewController = nil;

这些似乎都不起作用。有人可以帮我吗?

谢谢

【问题讨论】:

您的意思是现在位于新模式视图控制器下方的视图吗? 【参考方案1】:

如果我正确理解你的意思,我会说这是正常的,当你以模态方式呈现一个视图控制器时,底层视图控制器没有被删除并且视图仍然存在。据我所知,这就是模态视图控制器的呈现方式。

我不知道您要在应用程序中构建什么 UI,但也许您应该考虑使用 UINavigationController,或者,可能只是在需要时将视图添加/删除到基本视图。这当然只是一个猜测,我不知道你想做什么,但如果你提供更多细节,我可以提供进一步的帮助。

【讨论】:

好吧,我的应用程序加载了这么多 Nib 文件,每个文件都存储在内存中,并且不断在内存中构建。我想要的是能够加载一个新视图,然后关闭旧视图。 我还不太清楚你在做什么;如果您想从内存中删除模态视图,您可以在其控制器上调用–dismissModalViewControllerAnimated:;如果您不这样做并继续呈现控制器,则无法填满内存。实际上,如果是这种情况,您不应该使用模态视图,而是 UINavigationController;你可以用它获得任何你想要的动画效果,如果你关心的话......【参考方案2】:

呈现 world_pick 的视图控制器,也就是上面代码中的 self,应该不用管它——毕竟它呈现的是模态视图控制器,当模态控制器被解雇。它管理的视图也应该被单独保留。如果有内存警告,它可能会被卸载,但如果有可用内存,它应该保留,以便在模式视图控制器被解除时它就位。

您对此有什么担心吗?

【讨论】:

因为我没有关闭任何视图控制器,所以它们都会导致其他视图控制器。 -presentModalViewController:animated: 可能不是显示视图控制器的最佳方式。模态呈现意味着视图控制器是“模式”的一部分,该模式将在某个点结束并返回到前一个控制器。有关如何安装您自己的视图控制器作为唯一的***控制器(例如,与使用导航控制器相反)的指针,请查看基于视图的空项目的应用程序委托。但是,这并不是不好的用户界面——如果用户愿意,通常应该能够返回。 啊,我明白了,有没有办法通过基本上做代理做的事情来做同样类型的动画?也感谢您的回复

以上是关于从内存中删除视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

检测 - 弹出到根 VC 后,VIewctrollers 未从内存中删除

从项目的视图控制器中删除所有 -viewDidUnload 的方法

从父级删除后保留的子视图控制器

关闭如何删除视图控制器的内存?

IOS App的内存使用大小

从视图控制器中删除一些视图