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

时间:2019-03-17 15:05:07

标签: ios swift uiviewcontroller deinit

我创建了两个类似的视图控制器

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

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

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

deinit {
    print("vc deinit")
}

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

Sample code

1 个答案:

答案 0 :(得分:2)

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

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

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