OGeek|极客世界-中国程序员成长平台

标题: ios - NavigationController 中的循环 - 如何避免内存泄漏? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 22:06
标题: ios - NavigationController 中的循环 - 如何避免内存泄漏?

在我的应用程序中,我有一个带有四个 Controller 的导航 Controller 。用户从 A -> B -> C -> D -> A_1 -> B_2 -> ...等导航。这是一种方式,每个 ViewController 始终是新的 ViewController

这个循环是有意的。但是在 ViewController AC 我初始化了使用大量内存的 GoogleMaps。因此,在 15 次循环(以及 30 次 GoogleMaps 初始化)之后,我的应用程序由于内存泄漏而崩溃。

现在我看到了解决这个问题的不同可能性。

1) 我没有初始化新的 ViewController,而是重用了我的 VC。所以谷歌地图只是初始化了两次。 我不喜欢这样,因为我的 VC 可能有不同的状态。一个干净的初始化会更舒服,错误源也更小

2) 我在正确的时间移除堆栈,因为导航只是一种方式。当 A -> B 的转换完成后,我可以将 A 扔掉。 C -> D也是一样的。

3) 我在转换后取消初始化 Google map 。我还不知道该怎么做,但我很确定我会弄明白的。

我读到了 setViewControllers我可以用它来替换 View Controller 。

最佳做法是什么?苹果有什么推荐?



Best Answer-推荐答案


从第 3 个也是最简单的选项开始:

使用 override func viewWillDisappear(){} 来取消初始化谷歌地图。您也可以将此方法用于第二个选项。

但我认为,当您从 D 回到 A 时,您应该使用委托(delegate)。当您再次到达 A 时,您对 A 有何更改?

关于ios - NavigationController 中的循环 - 如何避免内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54536803/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4