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

标签 ios swift automatic-ref-counting deinit

我对内存管理和 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/

相关文章:

ios - 如何以编程方式使用 iOS 语音合成器? (文字转语音)

ios - UILabel 仅在放置在 viewcontroller 的 viewDidAppear 中时显示

ios - 自定义 UITableViewCell 中的prepareForSegue

ios - 大统一收据长度如何处理?

json - 解析 json 时使用未解析的标识符

ios - 将结构从 ObjC 传递到 Swift

swift - 保证局部变量中引用的生命周期

ios - CF_IMPLICIT_BRIDGING_ENABLED 在 xcode5 中不起作用?

iphone - Xcode 4 ARC 重新检查错误 - "changes retain/release properties of pointer"

swift - 使用可选的数组和类型安全,最佳实践?