繁体   English   中英

当视图控制器消失时,将调用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")
}

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

样例代码

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

那么,为什么没有调用第一个deinit (在View Controller )?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM