将UIViewControllers保留在内存中

时间:2014-08-23 01:46:11

标签: ios objective-c iphone uiviewcontroller

我正在使用其中一个"汉堡菜单"建立一个iOS应用程序。类型抽屉打开左边的选项列表。像这样:

Not actually my app / photo

每次点击某个项目时,例如"设置"它加载一个新的viewcontroller并将其显示在主视图控制器上。现在,我想知道的问题是,每次点击菜单中的新项目时,我是否应该释放视图控制器。

例如:

  • 您正在查看收件箱
  • 您点击设置
  • 我发布了InboxViewController并为init分配了SettingsViewController
  • 我将SettingsViewController设为主视图控制器

我希望将所有视图控制器保留在内存中,因为我认为如果先前已分配它,它将提供从一个到另一个的更平滑过渡,而不是每次都必须等待分配它。

我正在使用ARC

这是不好的做法吗?我可能在内存中有6-7个viewcontrollers。

3 个答案:

答案 0 :(得分:2)

看看SDK,Apple做出了两个选择:UINavigationController使整个VC的堆栈低于顶部,而UIPageViewController积极地释放除当前页面之外的任何页面。

这是一个"速度/空间"贸易。预计算和缓存对象将更快(一旦运行)但占用更多内存。更积极地释放和构建(或重建)将产生一些运行时间成本,但占用更少的内存。

问题也可能是过早或不必要的优化示例。对于少数典型的VC,分配很快,并且内存占用量(应该)很小。改变方法可能对速度或空间产生微不足道的影响。

我从最简单的方式开始(可能允许VC被动释放更简单)并查看是否存在需要解决的可证明问题。

答案 1 :(得分:1)

如果你考虑你正在做什么,它与UITabBarController没什么不同。这些观点在第一次观看之前不会加载,但随后会被保留并且#34;活着"无限期。我认为只要你保持加载的视图控制器的数量合理(单个数字)你可能会很好,但有一点需要注意,如果他们都在做一些密集的处理/加载/等等,它可能会变成有问题的。

答案 2 :(得分:0)

我不一定认为将所有ViewControllers保留在内存中是件好事,除非View包含需要很长时间才能获取的对象(即打开UIDocument或NSURLRequest)。

希望有所帮助!