首页 > 解决方案 > 由于内存峰值,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)

标签: iosswiftxcodememory-leaksscreenshot

解决方案


如果您从两个视图控制器中的每一个中调用上述代码,那么您永远不会关闭任何一个,您只需将一个呈现在另一个之上,这会增加内存。

我不知道您的应用程序的流程是什么,但是如果您使用视图控制器呈现视图控制器,present(_:animated:completion:)那么您应该dismiss(animated:completion:)在该视图控制器内的某个阶段调用以向后导航。如果您present(_:animated:completion:)从其中调用以获取另一个视图控制器并继续执行此操作,那么您只需像一副纸牌一样不断地将视图控制器添加到彼此之上。


推荐阅读