0

这似乎出现在我们项目的两个控制器上。我检查了代码和情节提要,情节提要中的转场没有在控制器中调用,没有与将触发转场的按钮相关的 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 将其关闭时,会创建一个空的控制器实例。我不明白为什么。

4

2 回答 2

3

我的第一个想法是也许你实际上有两个对象。尝试设置断点deinit并查看对象的指针值是否两次相同。

于 2017-02-07T16:41:58.600 回答
0

在这种情况下,故事板可能是罪魁祸首。尝试从情节提要中删除您的 UIViewController 子类并以编程方式创建它。那时应该只调用 Deinit 。

于 2017-05-18T03:21:10.687 回答