为什么wakeFromNib在笔尖中加载笔尖时被调用两次



我有两个笔尖:Parent.xib和Child.xib。

我已经将Child笔尖包含在Parent笔尖中,以简化绑定。我在loadView中以编程方式设置了子视图。问题是,wakeFromNib在Child的控制器中被调用了两次。

我想我明白为什么会发生这种事。当Parent完成加载时,它会向其对象发送一个wakeFromNib,由于Child是其nib的文件所有者,它也会在自己身上调用wakeFromNi。

我理解得对吗?我最初的印象是,wakeFromNib每个实例只能调用一次。我不应该把笔尖嵌入笔尖吗?

参见示例项目:https://github.com/panupan/AwakeFromNibTest

在某些情况下,每个实例可以多次调用awakeFromNib,例如您设置的实例。另一种情况是控制器加载多个笔尖对象。如果你真的想的话,你可以解决这个问题,但更好的设计是不必这样做

建议您在文件的所有者对象与其关联的nib文件之间保持一对一的对应关系。用同一File的Owner对象加载两个nib文件会导致该对象的wakeFromNib方法被调用两次,这可能会导致一些数据结构以不希望的方式重新初始化。还建议您避免从wakeFromNib方法实现加载其他nib文件。

在您的特定示例中,没有理由将一个nib文件嵌入另一个文件中。内存占用的缺点是必须将它们都加载到内存中,而不方便将所有对象都放在一个nib文件中。您应该将它们拆分,并在nib文件中使用NSObjectController实例来处理它们之间的绑定。

即使我有两个不同的文件所有者,awakeFromNib仍然被调用两次。

如果我有一个NSWindowController子类(MyWindowController),并且在它的笔尖中有一个包含从笔尖加载视图的awakeFromNibProjectController对象,则视图的控制器将获得awakeFromNib调用,然后原始ProjectController将再次接收awakeFromNib

相关内容

  • 没有找到相关文章

最新更新