ios - 当视图控制器消失时会调用 deinit 吗?
问题描述
我创建了两个视图控制器,例如
Navigation controller -> View Controller -> Details View Controller
1 2 3
(2) View Controller 中有一个按钮,单击该按钮将显示 (3) Details View Controller。我已经创建了一个从按钮到 (3) VC 的 segue。
我deinit
在这两个类中添加了块。
deinit {
print("vc deinit")
}
但是,这不会被记录。视图控制器何时会被释放?
解决方案
在这种情况下,每次点击导航上的后退按钮(弹出到上一个视图控制器)时,唯一deinit
会被调用的是第二个(在 中实现的那个)。Details View Controller
那么,为什么第一个deinit
( 中的那个View Controller
)没有被调用?
那是因为它是导航控制器堆栈中的第一个视图控制器。推送到第二个视图控制器并不意味着前一个视图控制器已被释放并且仍然作为导航堆栈中的第一个元素存在;例如,这就是为什么viewDidLoad
当您从弹出的视图控制器返回时不应调用方法的原因,这意味着它没有被释放。
推荐阅读
- php - 如何将项目(主题)集合保存到列表中并保存在数据库中
- android - 如何向其适配器类发送和检索意图数据
- swift - Firestore - 每秒多次写入具有相同 ID 的文档
- python - 使用python解析DNS RDATA
- python - 熊猫插值保持原始索引
- css - 粘性 flexbox 页脚未固定到底部
- python - 使用左右边距和固定行长写入文件的 Python 代码
- rust - 如何在不知道其类型的情况下获取异构列表的各个元素?
- ssis - SQL Server 2016:使用 dtexec 从 cmd 行运行 DTS 包以从表导出到平面文件时出错
- jhipster - jHipster swagger api-doc 未发送 JWT 授权标头导致 401