如果我可以在不使用文件所有者的情况下从 nib 文件加载对象,那么文件所有者存在的原因是什么?也可以在不使用文件所有者的情况下创建 outlet-action 连接。例如,我可以直接从对象到 Nib 建立连接。所以我真的无法理解文件所有者的必要性。它与 MVC 模式有什么关系吗?文件的所有者是否必须是 UIViewController 类型?
最佳答案
在加载 nib 文件期间,Cocoa 生成在 nib 文件中序列化的每个对象。然后,对于 nib 文件中的每个连接,它在目标对象上调用 setValue:forKey:
来创建连接。一些连接指向对象 nil
。这些 setValue:forKey:
消息被发送到作为文件所有者传递的任何对象。
如果您没有文件所有者,那么 nil
连接将被忽略。如果您没有 nil
连接,那么这与没有文件所有者没有什么不同。这不是特别常见。
所有这些都允许您通过将不同的文件所有者传递给加载过程来实例化同一 nib 文件对象的多个实例。
编辑:
请记住,一个 nib 文件只是一堆序列化的对象。当您使用 initWithNibName:bundle:
以编程方式创建 View Controller 时,在加载 nib 文件之前 View Controller 已经存在。 nib 文件中的对象几乎总是希望能够引用该 View Controller 。所以我们将 View Controller 作为文件所有者传递给 UINib
。 nib 文件中任何显示 nil
的地方,UINib
都会用文件所有者(通常是 View Controller )替换它。
这非常灵活,但灵 active 不是重点。如果您在 nib 实例化期间未将其传入,则无法引用 nib 文件中的 View Controller 。
关于objective-c - 哪些问题可能导致将 nib 文件的所有者设置为 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10882411/