gpt4 book ai didi

ios - 管理内存使用 VIewController 堆栈

转载 作者:搜寻专家 更新时间:2023-10-31 22:00:15 24 4
gpt4 key购买 nike

我注意到当打开一个 View 的多个实例时,我的内存会随着用户打开的 View 越多而继续攀升。如果用户开始回击,内存使用量会随着每个 View Controller 的关闭而下降。但是,无论用户在做什么,他都可以打开 20 多个 View Controller ,我该如何管理内存利用率?请记住,我需要在后台加载所有这些 View ,以便在用户返回时可以快速加载它们

下面是我如何创建每个实例:

let storyboard = UIStoryboard(name: "Storyboard", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("FriendPage") as! FriendVC
self.navigationController!.pushViewController(vc, animated:false)

如何管理内存利用率?

最佳答案

导航堆栈将所有 View Controller 加载到内存中。这是其工作方式不可或缺的一部分。

正如 Beardsley 先生所说,您可以设置 View Controller 以释放 viewDidDisappear 方法中的大型数据结构(包括将 ImageView 设置为 nil),然后在 viewWillAppear 中重新加载它们。如果您确保所有内容都缓存到磁盘,它应该会快速重新加载。

要超越这一点,您需要放弃导航 Controller 并创建您自己的显示一系列 subview Controller 的父 View Controller 。您可以让父级跟踪用户遵循的导航路径并将每个 View Controller 的状态数据保存到磁盘,然后在用户按下后退按钮时,重新调用前一个 View Controller 并从它保存的状态数据中重建它.只要所有内容都是从磁盘而不是网络加载的,您应该能够在用户按下后退按钮时几乎即时显示每个屏幕。

这将需要您进行大量自定义工作,但应该不会那么难。

有像“transitionFromViewController:toViewController:duration:options:animations:completion:”这样的方法可以让你在 subview Controller 之间创建自定义转换。您应该能够轻松创建您想要的任何过渡效果。

通过保存用户访问的 View Controller 列表和从磁盘重新创建每个 View Controller 所需的状态数据 block ,您应该能够模拟导航堆栈,同时只有一个 subview Controller 处于事件状态并在内存中一次。

不过,在沿着这条路走下去之前,我建议您查看您的用户界面,看看是否有办法限制用户可以导航的深度。您可以对用户导航的深度添加某种限制。详细信息将取决于您的应用设计。

关于ios - 管理内存使用 VIewController 堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32911863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com