为什么我应该设置File的所有者类标识,而不是显示在nib中的自定义对象的类标识,并从它建立连接?如果我将文件的所有者设置为nil,会发生什么?对我来说,使用nil文件的所有者一切都很好,那么从它进行连接有什么要求呢?
发布于 2012-06-04 04:06:54
NIB表示存档的对象图。您可以加载它,该对象图将被重新构建。问题是,您通常希望/需要将新加载的对象图挂接到程序的已有对象图中。你不会希望它站在一边,与其他一切隔绝。
有几种方法可以将新加载的对象图连接到程序的对象图的其余部分。一种方法是NIB中可用的代理对象集。其中一个用于应用程序对象。另一个这样的代理对象是File的所有者。代理对象是在NIB中具有表示但实际上不包含在NIB中的对象。与NIB中的其他对象不同,由代理表示的对象不是在加载NIB时创建的,它们在加载NIB之前就存在了。代理允许这些预先存在的对象与NIB中的对象之间的连接。这就是如何将来自NIB的新对象图连接到程序的现有对象图。
MainMenu NIB是不同寻常的。它是在应用程序启动时由Cocoa自动加载的,这意味着在预先存在的对象中没有(实际上不可能有)太多。该NIB通常还包含应用程序委托的一个实例,这是一种协调控制器。但是,通常情况下,其他类型的NIB不包含协调控制器。(它们确实包含中介控制器,如NSArrayController
,但这是不同的。)相反,协调控制器通常是在代码中创建的,通常,它们负责加载NIB。
例如,您将使用NSWindowController
作为窗口的协调控制器。该窗口将在NIB中定义。窗口控制器将在代码中实例化-无论哪个代码决定应该创建窗口-它将加载NIB。它也将是NIB的文件所有者。它将管理窗口和NIB的顶级对象。
如果您将文件的所有者设置为nil
,那么a)此时您可能正在处理非常简单的NIBs,b)您可能会从您加载的NIBs中泄漏顶级对象。
发布于 2012-06-04 03:25:58
文件的所有者是包含该视图的所有IBOutlets和IBActions的文件。例如,如果您有一个"ViewController“类,并且它包含一个IBOutlet UIButton *button
和-(IBAction)changeViewWhenButtonPressed: (id) sender
,那么您连接插座和操作的唯一方法就是将"ViewController”设置为视图文件的所有者。
我相对确定类标识是File的所有者的同义词。
另外,这些链接可能会有帮助:
What are File Owner and First Responder in iPhone SDK - xCode?
发布于 2012-06-04 04:10:07
“file‘s owner”是nib中的对象可以引用nib外的对象的方式,反之亦然。(还有一些更复杂的方法可以做到这一点,但并不常用。)如果你不需要这样做,你就不需要使用文件的所有者。
对于主应用程序,文件的所有者是Application对象。如果您的所有应用程序逻辑都在一个也在nib中实例化的自定义类中,并且如果您对发送到应用程序的操作消息使用“first responder”,那么您可能不需要连接到它。这样就可以了。
如果您有一个文档窗口或弹出窗口或其他东西,文件的所有者通常是正在查看的对象,因此能够将ui附加到它是很有用的。您可以多次加载相同的nib,每个nib都由该类的不同实例“拥有”-不同的文档或已检查的对象或其他对象。
(基本上,文件的所有者就是传递给nib-loading方法中的" owner :“参数的任何对象。)
https://stackoverflow.com/questions/10873138
复制相似问题