什么描述了目标-c / cocoa Nib中最好的“文件所有者”?

时间:2009-02-28 14:39:34

标签: objective-c cocoa

不幸的是,文件所有者的解释在Apple文档中很短。我知道它是一个代理对象。但关于“文件所有者”对象的真正意义何在?有什么好处?

5 个答案:

答案 0 :(得分:29)

Nib文件通常被称为“冻干”并准备运行,它们是使您的应用程序更加模块化的一种很好的方式,可以减少内存使用量。 Nib文件可以解冻,或在应用程序需要其中的对象时随时加载到内存中。

每当nib文件被解冻时,它需要一个指向解冻它的对象的指针。而该对象通常是文件的所有者。文件的所有者允许nib文件中的对象访问nib文件解冻之前存在的对象。在某种程度上,File的所有者充当新加载的对象和旧对象之间的桥梁。

答案 1 :(得分:6)

如果您阅读并了解nib加载过程,则更容易理解文件所有者参考的含义。

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html

Cocoa的框架代表您自动处理许多nib加载,其中一个Cocoa自己的内置类用作管理或“拥有”nib文件实例化对象的控制器类。当您手动加载自己的笔尖时,您可以选择将哪个类作为文件的所有者。

当您阅读有关nib加载过程的内容时,请注意许多加载方法中的“owner:”参数。正是这个对象将作为文件所有者

连接到nib文件中的对象

答案 2 :(得分:4)

  

我知道这是一个代理对象。

不是。这是一个真实的对象。笔尖中的图标只是代理,因为所有其他图标代表笔尖中的对象已存档,而文件所有者则不是。但是FO不是您应用程序中的代理对象。

  

但是那个“文件所有者”对象的真正含义是什么?有什么好处?

这是拥有笔尖中对象的对象。

就是这样。除此之外没什么。

答案 3 :(得分:4)

解释它的最好方法是举例说明如何设置它。假设你有一个NSWindowController子类,它是一个首选项窗口的控制器。首选项窗口位于名为“首选项”的NIB中。

在NSWindowController子类中,您将拥有以下init方法:

- (id)init {
    if (self = [super initWithWindowNibName:@"Preferences"]) {
        //do initalisation
    }
    return self;
}

这会初始化窗口控制器,将其与应用程序主包中名为“Preferences”的nib相关联。请注意,尚未加载NIB(当您第一次在窗口控制器上调用-window时会发生这种情况。

在首选项NIB中,您将单击“文件”的“所有者”图标,然后转到“检查器”的“类信息”面板。在这里,您可以将类设置为窗口控制器类的名称(例如,PreferencesController)。现在,它代表了一个窗口控制器的实例,因此您可以连接出口和操作。

在IB中编辑时,它只是对象的代理,就像您拖动到NIB的任何对象一样,但是当加载NIB时,它将被设置为您创建的窗口控制器。

答案 4 :(得分:1)

http://www.cocoadev.com/index.pl?FilesOwner

  

实质上,无论哪个加载NibFile的对象都成为该nib文件的文件所有者。