gpt4 book ai didi

ios - Swift - 执行 segue 时 Viewcontrollers 不会取消初始化

转载 作者:行者123 更新时间:2023-11-29 05:43:51 24 4
gpt4 key购买 nike

我对内存管理和 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)但我的应用程序崩溃了。

我在这里遗漏了什么吗?

ViewControllersnavigationController 时去初始化是popped执行 segue 时也不要取消初始化以编程方式。

有人可以告诉我我做错了什么吗?

谢谢。

最佳答案

好吧,如果我理解正确的话,你可能对segues的工作原理有误解

Segues 不能用于返回堆栈中的上一个 viewController

这非常重要。如果您使用segues作为返回的方式而不是使用popViewController,那么您将创建一个要返回的viewController的新实例,因此自viewController以来永远不会调用deinit仍然在内存中。

本质上,像这样的列表 -> 详细信息 -> 列表,您刚刚使用 segue 创建了列表的另一个实例。

关于ios - Swift - 执行 segue 时 Viewcontrollers 不会取消初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56328968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com