ios 由于内存峰值,应用程序在截屏时崩溃

ios application crashes when taking a screenshot due to memory spike

我有一个带有多个视图控制器和导航控制器的应用程序。如果我在两个视图控制器之间切换大约 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:) 以到达另一个视图控制器并继续这样做,那么您只需像一副纸牌一样不断添加视图控制器。

谢谢你的帮助。我设法在后退一步时使用 dismiss 并在返回主屏幕时使用 unwind segues 来解决问题。现在无论我刷了多少次VC再回来,截图都不会崩溃