什么问题可能导致将nib文件的所有者设置为nil?

Mar*_*tos 5 model-view-controller xcode objective-c nib ios

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

Rob*_*ier 5

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

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

所有这些使您可以通过将不同的文件所有者传递到加载过程来实例化同一nib文件对象的多个实例。


编辑:

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

这是非常灵活的,但是灵活性不是重点。如果您在笔尖实例化过程中未将其传入,则无法引用该笔尖文件中的视图控制器。