当视图控制器消失时,deinit 会被调用吗?



我创建了两个视图控制器,例如

Navigation controller -> View Controller -> Details View Controller
1                     2                      3

(2) 视图控制器中有一个按钮,单击该按钮将显示 (3) 详细信息视图控制器。我已经创建了一个从按钮到 (3) VC 的 segue。

我在这两个类中添加了deinit块。

deinit {
print("vc deinit")
}

但是,这不会被记录下来。视图控制器何时解除分配?

示例代码

在这种情况下,每次点击导航上的后退按钮(弹出到上一个视图控制器)时,唯一会被调用的deinit是第二个(在Details View Controller中实现的那个)。

那么,为什么第一个deinit(View Controller中的那个)没有被召唤?

这是因为它是导航控制器堆栈中的第一个视图控制器。推送到第二个视图控制器并不意味着前一个视图控制器已被释放并且仍作为导航堆栈中的第一个元素存在;例如,这就是为什么当您从弹出的视图控制器返回时viewDidLoad不应调用该方法的原因,这意味着它没有被解除分配。

最新更新