在内存中保留UIViewControllers

3
我正在开发一个iOS应用程序,其中包含一种“汉堡菜单”类型的抽屉式菜单,打开后显示左侧的选项列表,如下所示:
每次点击一个项目,例如“设置”,它都会加载一个新的视图控制器并将其显示在主视图控制器上。现在,我想知道的问题是,每次单击菜单中的新项目时,是否应该释放视图控制器。
例如:
- 您正在查看收件箱 - 您单击“设置” - 我释放InboxViewController并分配初始化SettingsViewController - 我使SettingsViewController成为主视图控制器
我想保留所有视图控制器在内存中,因为我认为如果之前已经分配了它,那么从一个视图控制器到另一个视图控制器的过渡会更加平滑,而不必每次等待重新分配。
我正在使用ARC。
这是不好的做法吗?我可能会有6-7个视图控制器在内存中。

你正在使用ARC吗?你是否明确地“释放”对象? - Mike
@Mike 我正在使用 ARC。 - Brian Weinreich
3个回答

2
看SDK,苹果做了两个选择:UINavigationController会保留顶部以下的整个VC堆栈,而UIPageViewController则会积极释放除当前页面外的所有页面。
这是一种“速度/空间”权衡的例子。预计算和缓存对象将更快(一旦运行),但占用更多内存。更积极地释放并构建(或重建)将产生一些运行时成本,但占用更少内存。
问题可能也是过早或不必要的优化示例。对于几个典型的VC,分配很快,内存占用量(应该)很小。改变方法可能对速度或空间都没有显着影响。
我会从更简单的方式开始(可能是允许VC被动释放),并查看是否存在需要解决的实际问题。

1
如果你考虑你正在做什么,它与UITabBarController没有什么不同。视图在第一次查看时才加载,但然后无限期地保持“活动”状态。我认为只要你保持已加载的视图控制器数量合理(个位数),你可能会没问题,但有一个例外,如果它们都在进行一些密集的处理/加载等操作,那么可能会出现问题。

在它们被加载后,除非您再次查看并对其执行操作,否则它们不会进行任何其他处理。我想我会尝试运行一些测试,但从人们所说的来看,听起来应该没问题。 - Brian Weinreich
我同意,我认为你应该没问题。 - Mike

0

我不认为将所有的ViewControllers保留在内存中是一个好主意,除非View包含需要长时间获取的对象(例如打开UIDocument或从NSURLRequest中获取)。

希望这能有所帮助!


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