ios - 由于内存峰值,iOS应用程序在截屏时崩溃
问题描述
我有一个带有多个视图控制器和导航控制器的应用程序。如果我在两个视图控制器之间切换大约 10 次,然后从我的 iphone 截取屏幕截图,应用程序会冻结,内存会飙升至 1 GB,然后崩溃。如果我在屏幕之间切换 4-5 次后截屏,截屏时应用程序不会崩溃。我怀疑我的应用程序正在创建视图控制器的多个实例,但我没有找到释放它们的方法。无论如何,如果您能给我任何提示,将不胜感激。在我的示例中,我展示了两个视图控制器,如下所示:
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "comanda")
let first = storyBoard.instantiateInitialViewController()
self.present(nextViewController, animated:true, completion:nil)
和
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "meniuControl4") as! SideMenuController
self.present(nextViewController, animated:true, completion:nil)
解决方案
如果您从两个视图控制器中的每一个中调用上述代码,那么您永远不会关闭任何一个,您只需将一个呈现在另一个之上,这会增加内存。
我不知道您的应用程序的流程是什么,但是如果您使用视图控制器呈现视图控制器,present(_:animated:completion:)
那么您应该dismiss(animated:completion:)
在该视图控制器内的某个阶段调用以向后导航。如果您present(_:animated:completion:)
从其中调用以获取另一个视图控制器并继续执行此操作,那么您只需像一副纸牌一样不断地将视图控制器添加到彼此之上。
推荐阅读
- python - 如何使用 Selenium(Python)在嵌套范围内获取文本?
- python - 如何在使用 Python3 创建一个实例后立即做某事?
- matplotlib - 用于大气剖面的 Matplotlib
- vue.js - Puppeter:使用 Vuex 存储/状态生成 Vue 页面的 PDF 会导致空白页面
- java - 将 SpEL 输出转换为 long 以用作注释参数
- jenkins - 我正在尝试对詹金斯管道参数进行一些自定义
- vmware - 如何从 'vim.ResourcePool:resgroup-151' 中删除资源池名称
- swift - 定时器功能在进程开始时创建暂停,而不是像我想要的那样结束
- linux - ELF 文件在内存中的布局方式
- vba - 如何将具有外部控制源的文本框中的值存储到访问的主窗体中?