为什么awakeAfterUsingCoder多次调用?

时间:2015-12-17 04:12:56

标签: ios storyboard viewcontroller

尝试使用普通的新单视图应用程序模板,因此在故事板中只有一个视图控制器

在ViewController中

class ViewController: UIViewController {
    override func awakeAfterUsingCoder(aDecoder: NSCoder) -> AnyObject? {
        print(self)
        return self
    }
}

我们可以看到它被打印了3次,为什么会这样?

在规范中

  

由子类重写以替换另一个对象来代替已解码并随后收到此消息的对象。

     

您可以使用此方法来消除编码器创建的冗余对象。例如,如果在解码对象后发现已存在等效对象,则可以返回现有对象。如果返回替换,则重写方法负责释放接收器。

     

NSCoder调用此方法。 NSObject的实现只是返回self。

为什么多次打电话?

1 个答案:

答案 0 :(得分:0)

我已根据您的建议进行测试,我发现它会调用2次。有了这个,我在下面描述我的知识:

  • ViewController会致电initWithCoder,之后会致电awakeAfterUsingCoder
  • 继续ViewController将致电loadNibNamedloadNibNamed仍然会再次致电awakeAfterUsingCoder

我从其他来源引用此信息。您可以查看,如果有一些信息。请与我分享。我非常感谢:)。