从内存中删除视图控制器?
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 未从内存中删除