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

问题描述 投票:0回答:1

我创建了两个视图控制器

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

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

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

deinit {
    print("vc deinit")
}

但是,这不会被记录。何时视图控制器将被取消分配?

Sample code

ios swift uiviewcontroller deinit
1个回答
2
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.