这似乎出现在我们项目的两个控制器上。我检查了代码和情节提要,情节提要中的转场没有在控制器中调用,没有与将触发转场的按钮相关的 IBAction 或 IBOutlet 。虽然当我离开我的控制器时,我可以从打印中看到 deinit 方法被调用了两次。
这很奇怪,因为 viewDidLoad 和 viewWillDisappear 只被调用一次,以前有没有人遇到过这种行为?与 SO 上的双重 deinit 没有任何关系,我非常想了解发生了什么。
编辑:所以,一点更新。我添加了这段代码,我设置了一个断点来检查控制器何时初始化:
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
required init(coder aDecoder: NSCoder) {
print("init coder style")
super.init(coder: aDecoder)!
}
因此,当我触发 segue 到达我的控制器时,init coder 被调用一次,当我点击插入 popSegue 的所述控制器的 ok 按钮时,我的控制器然后第二次初始化(也使用 init coder)和然后发生双重deinit。
因此,当我使用 popSegue 将其关闭时,会创建一个空的控制器实例。我不明白为什么。