我创建了两个类似的视图控制器
Navigation controller -> View Controller -> Details View Controller
1 2 3
(2)视图控制器中有一个按钮,单击该按钮将显示(3)详细信息视图控制器。我已经创建了一个从按钮到(3)VC的序列。
我在这两个类中添加了deinit
个块。
deinit {
print("vc deinit")
}
但是,这不会被记录。视图控制器什么时候会被释放?
答案 0 :(得分:2)
在这种情况下,每次单击导航上的后退按钮(弹出到前一个视图控制器时),唯一会调用的deinit
是第二个(在Details View Controller
中实现的那个) )。
那么,为什么第一个deinit
(View Controller
中的那个)没有被调用?
那是因为它是导航控制器 stack 中的第一个视图控制器。推送到第二个视图控制器并不意味着先前的一个或多个已经被释放,并且仍然作为导航堆栈中的第一个元素存在;举例来说,这就是为什么从弹出的视图控制器返回时不应调用viewDidLoad
方法的原因,这意味着它没有被释放。