我对内存管理和 ARC 的整个概念还很陌生。
我最近对此进行了研究,发现成功与否。
首先应该指出一些 ViewController
确实要取消初始化,但我仍在学习和清理我的应用程序。
但是,我注意到的一个常见模式是,当我使用 navigationController?.popViewController(animated: true)
行时这实际上是deinit
View Controller ,如果没有强引用则给出。
但是,我的问题是,当我使用 segue 并使用 performSegue(withIdentifier: "showDetail_Segue", sender: nil)
时deinit
方法从未被使用/调用。 (我只有一个打印语句来指示 View 是否已被取消初始化)。在大多数情况下,当我执行 segue 时,我会将数据传递到另一个 View Controller ,因此,我使用以下函数 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {}
.
我尝试将我的segue更改为navigationController?.pushViewController(VC, animated: true)
但我的应用程序崩溃了。
我在这里遗漏了什么吗?
ViewControllers
当 navigationController
时去初始化是popped
执行 segue
时也不要取消初始化以编程方式。
有人可以告诉我我做错了什么吗?
谢谢。
最佳答案
好吧,如果我理解正确的话,你可能对segues的工作原理有误解
Segues 不能用于返回堆栈中的上一个 viewController
这非常重要。如果您使用segues作为返回的方式而不是使用popViewController,那么您将创建一个要返回的viewController的新实例,因此自viewController以来永远不会调用deinit仍然在内存中。
本质上,像这样的列表 -> 详细信息 -> 列表,您刚刚使用 segue 创建了列表的另一个实例。
关于ios - Swift - 执行 segue 时 Viewcontrollers 不会取消初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56328968/