objective-c - 哪些问题可能导致将 nib 文件的所有者设置为 nil?

标签 objective-c ios xcode model-view-controller nib

如果我可以在不使用文件所有者的情况下从 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/

相关文章:

ios - 尝试访问 Swift 中的无主引用总是导致应用程序崩溃

swift - 找不到目标框架的底层 Objective-C 模块

swift - 为什么在使用变量过滤 RealmSwift 时 Xcode 会崩溃?

ios - 使用 Xcode 手动将图像数据放入 Plist 文件

ios - 将音频修剪为视频长度

objective-c - Ho 在混合应用程序(主要语言 ObjC)中从 Swift 获取对 appdelegate 的引用以避免引用循环

ios - Objective-C 消息被发送到地址为 : 的已释放 'NSThread' 对象(僵尸)

objective-c - NSObjectController 混淆绑定(bind)到类属性。帮助!

ios - 如何访问 ios OTA 安装上的取消事件?

ios - 内容繁重的 iPhone 应用程序的数据格式 - Plist 还是 XML?