5

如果我可以在不使用文件所有者的情况下从 nib 文件加载对象,那么文件所有者存在的原因是什么?此外,可以在不使用文件所有者的情况下创建出口操作连接。例如,我可以直接从对象连接到笔尖。所以我真的无法理解对文件所有者的需求。它与MVC模式有什么关系吗?文件的所有者必须是 UIViewController 类型吗?

4

1 回答 1

5

在加载 nib 文件期间,Cocoa 会生成在 nib 文件中序列化的每个对象。然后,对于 nib 文件中的每个连接,它调用setValue:forKey:目标对象来创建连接。一些连接与对象有关nil。这些setValue:forKey:消息被发送到作为文件所有者传递的任何对象。

如果您没有文件所有者,则nil连接将被忽略。如果您没有nil连接,那么它与没有文件所有者没有什么不同。这不是特别常见。

所有这些都允许您通过将不同的文件所有者传递给加载过程来实例化相同 nib 文件对象的多个实例。


编辑:

请记住,一个 nib 文件只是一堆序列化的对象。当您使用 以编程方式创建视图控制器时initWithNibName:bundle:,视图控制器在加载 nib 文件之前已经存在。nib 文件中的对象几乎总是希望能够引用该视图控制器。所以我们将视图控制器传递给UINib文件所有者。nib 文件中的任何位置nilUINib都将其替换为文件所有者(通常是视图控制器)。

这是非常灵活的,但灵活性不是重点。如果您没有在 nib 实例化期间将其传入,则无法引用 nib 文件中的视图控制器。

于 2012-06-04T14:02:58.413 回答