【问题标题】: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;

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

谢谢

【问题讨论】:

  • 您的意思是现在位于新模式视图控制器下方的视图吗?

标签: objective-c ios view uiviewcontroller subview


【解决方案1】:

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

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

【讨论】:

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

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

您对此有什么担心吗?

【讨论】:

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