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

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

我想我知道为什么会这样。父级完成加载后,它将awakeFromNib发送到其对象,并且由于Child是其nib的文件所有者,因此它也会对其自身调用aakeakeFromNib。

我了解这个权利吗?我最初的印象是awakeFromNib每个实例仅应调用一次。我不应该在笔尖中嵌入笔尖吗?

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

最佳答案

在某些情况下,每个实例可以多次调用awakeFromNib,例如您设置的实例。另一种情况是控制器加载了多个笔尖对象。如果确实需要,可以解决此问题,但是不必设计更好的设计。从NSNibAwaking Protocol Reference


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


在您的特定示例中,没有理由将一个nib文件嵌入另一个文件中。您会遇到内存占用量不足的问题,即必须将它们都加载到内存中,而又不能将所有对象都放在一个nib文件中。您应该将它们分开,并在nib文件中使用NSObjectController实例来处理它们之间的绑定。

08-18 14:51