Ios 将UIViewController保留在内存中
我正在构建一个iOS应用程序,其中有一个“汉堡包菜单”类型的抽屉,可以打开左侧的选项列表。像这样: 每次单击项目(例如“设置”)时,它都会加载一个新的viewcontroller并将其显示在主视图控制器上。现在,我想知道的问题是,我是否应该在每次单击菜单中的新项时释放ViewController 例如:Ios 将UIViewController保留在内存中,ios,objective-c,iphone,uiviewcontroller,Ios,Objective C,Iphone,Uiviewcontroller,我正在构建一个iOS应用程序,其中有一个“汉堡包菜单”类型的抽屉,可以打开左侧的选项列表。像这样: 每次单击项目(例如“设置”)时,它都会加载一个新的viewcontroller并将其显示在主视图控制器上。现在,我想知道的问题是,我是否应该在每次单击菜单中的新项时释放ViewController 例如: 您正在查看收件箱 单击“设置” 我释放InboxViewController和alloc init设置视图控制器 我使SettingsViewController成为主视图控制器 我希望将
- 您正在查看收件箱
- 单击“设置”
- 我释放InboxViewController和alloc init设置视图控制器
- 我使SettingsViewController成为主视图控制器
这是坏习惯吗?我的内存中可能有6-7个ViewController。我不一定认为将所有ViewController都保存在内存中是一件好事,除非视图包含的对象需要很长时间才能获取(即打开UIDocument或从NSURLRequest)
希望有帮助如果你考虑你在做什么,那就和UITabBar控制器没什么不同。视图在第一次查看之前不会加载,但之后会无限期地保持“活动”。我认为只要你保持加载的视图控制器的数量合理(个位数),你可能就没事了,但有一点需要注意,如果它们都在做一些密集的处理/加载/等等,可能会出现问题。看看SDK,苹果做出了两种选择:
UINavigationController
将整个VCs堆栈保持在顶部以下,而UIPageViewController
积极发布除当前页面以外的任何页面
这是一个“速度/空间”交易的例子。预计算和缓存对象会更快(一旦运行),但会占用更多内存。更积极地发布和构建(或重建)将产生一些运行时成本,但占用更少的内存
这个问题也可能是一个过早优化或不必要优化的例子。对于少数典型的VC,分配速度很快,内存占用(应该)很小。改变进近可能对速度或空间影响不大
我会从哪种更简单的方式开始(可能让风投被动释放更简单),看看是否有一个明显的问题需要解决。您使用的是ARC吗?你是否明确地“释放”了对象?@Mike我正在使用Arc加载对象后,它们不会进行任何额外的处理,直到你再次查看它们并对它们执行操作。我想我会试着做一些测试,但从人们的说法来看,似乎一切都会好起来。我同意,我认为你应该没事。