为什么我应该设置文件的所有者的类标识,而不是 Nib 中显示的自定义对象的类标识,并由此建立连接?如果我将文件的所有者设置为nil,会发生什么?
对我来说,所有文件都可以与nil文件的所有者一起正常工作,因此从该文件进行连接有何区别?

最佳答案

NIB代表存档的对象图。您可以加载它,并且该对象图将被重构。通常,您希望/需要将新加载的对象图挂接到程序中已存在的对象图中。您不希望它与众不同,与其他事物脱节。

新加载的对象图可以通过几种方式连接到程序的其余对象图。一种方法是在NIB中可用的一组代理对象。应用程序对象有一个。另一个这样的代理对象是文件的所有者。代理对象是在NIB中具有表示形式但实际上未包含在NIB中的事物。与NIB中的其他对象不同,代理所代表的对象在加载NIB时不会创建,而是在加载NIB之前存在。代理允许这些预先存在的对象与NIB中的对象之间建立连接。这样,NIB的新对象图可以连接到程序的现有对象图。

MainMenu NIB不常见。它是由Cocoa在应用程序启动时自动加载的,这意味着(实际上不是)现有对象的方式并没有太多。该NIB通常还包含应用程序委托(delegate)的实例,这是一种协调 Controller 。但是,通常,其他类型的NIB不会包含协调 Controller 。 (它们确实包含中介 Controller ,例如NSArrayController,但这是不同的。)相反,协调 Controller 通常是用代码创建的,并且通常负责加载NIB。

例如,您将使用NSWindowController作为窗口的协调 Controller 。该窗口将在NIB中定义。窗口 Controller 将用代码实例化(无论哪个代码决定应创建一个窗口),并且它将加载NIB。它也将是NIB的文件所有者。它会管理NIB的窗口和顶级对象。

如果将文件的所有者设置为nil,则a)此时您可能正在处理非常简单的NIB,并且b)您可能正在从加载的NIB中泄漏顶级对象。

10-08 08:22
查看更多