如果我可以在不使用文件所有者的情况下从nib文件加载对象,那么文件所有者存在的原因是什么?此外,可以在不使用文件所有者的情况下创建插座 - 操作连接。例如,我可以直接从对象到nib进行连接。所以我真的无法理解文件所有者的需要。它与MVC模式有什么关系吗?文件的所有者必须是UIViewController类型吗?
答案 0 :(得分:4)
在加载nib文件期间,Cocoa生成在nib文件中序列化的每个对象。然后,对于nib文件中的每个连接,它在目标对象上调用setValue:forKey:
以创建连接。有些连接是对象nil
。这些setValue:forKey:
消息被发送到作为文件所有者传递的任何对象。
如果您没有文件所有者,则会忽略nil
个连接。如果您没有nil
个连接,那么它与没有文件所有者没有什么不同。这不是特别常见。
所有这些都允许您通过将不同的文件所有者传递给加载过程来实例化相同nib文件对象的多个实例。
编辑:
请记住,nib文件只是一堆序列化对象。以编程方式创建具有initWithNibName:bundle:
的视图控制器时,视图控制器在加载nib文件之前已存在。 nib文件中的对象几乎总是希望能够引用该视图控制器。因此,我们将视图控制器作为文件所有者传递给UINib
。 nib文件说nil
的任何地方,UINib
都会替换文件所有者(通常是视图控制器)。
这非常灵活,但灵活性不是重点。如果在nib实例化期间没有传入视图控制器,则无法在nib文件中引用视图控制器。