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

Will deinit gets called when a view controller gets disappeared?

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

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

(2) View Controller 中有一个按钮,单击该按钮将显示 (3) Details View Controller。我创建了一个从按钮到 (3) VC.

的转场

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

deinit {
    print("vc deinit")
}

但是,这不会被记录。什么时候会释放视图控制器?

Sample code

在这种情况下,每次您点击导航上的后退按钮(弹出到上一个视图控制器)。

那么,为什么第一个 deinitView Controller 中的那个)没有被调用?

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