据我所知,在 nib 文件中引用对象的常用方法是创建一个IBOutlet
对象,然后在 Interface Builder 中用蓝线连接它。
但我刚刚在 Lynda.com 上看到了一个视频,培训师没有这样做,而是UIView
在头文件中创建了一个对象,并将其连接到他UIView
在 Interface Builder 中的对象。
所以我的问题是:使用IBOutlet
对象而不是简单地使用与 IB 中的对象相同类的对象有什么好处?有区别吗?
据我所知,在 nib 文件中引用对象的常用方法是创建一个IBOutlet
对象,然后在 Interface Builder 中用蓝线连接它。
但我刚刚在 Lynda.com 上看到了一个视频,培训师没有这样做,而是UIView
在头文件中创建了一个对象,并将其连接到他UIView
在 Interface Builder 中的对象。
所以我的问题是:使用IBOutlet
对象而不是简单地使用与 IB 中的对象相同类的对象有什么好处?有区别吗?
IBOutlet
只是对 Interface Builder 的提示。IBOutlets 可以是任何东西。UIView
, UIButton
,UITextView
等
@property (nonatomic, retain) IBOutlet UIView * Foo;
在上面的例子中,什么是 Foo?IBOutlet 还是 UIView?两者都是。但是您的问题不允许这样做。
您可能想在此处查看 Apple 文档:http: //developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCTutorial/06Controller/06Controller.html
他们进一步描述了 IBOutlet 的作用:
一个对象可以通过向出口发送消息来与应用程序中的其他对象进行通信。出口可以引用应用程序中的任何对象:用户界面对象,如文本字段和按钮、模型对象(通常是自定义类的实例),甚至是应用程序对象本身。Outlets 是特殊的实例变量,因为它们可以在 Interface Builder 中设置。
和:
注意:IBOutlet 是一个空定义的宏,C 预处理器在编译时将其删除。Interface Builder 使用它来识别插座声明,以便在视觉连接插座时显示它们。
总之:
IBOutlets 几乎可以引用任何东西。它们只是对 Interface Builder 的提示,它允许您在加载 XIB 时设置它们的值。事实上,文本IBOutlet
在 Interface Builder 世界之外几乎没有意义,以至于它从最终产品中被剥离,因为除了帮助 Interface Builder 之外,它完全没有任何功能。
我会回去看看你连接的其他一些东西IBOutlets
,你肯定会发现它们确实有一些真正的类型。
IBOutlet 只是一个关键字,向 IB 表明,“嘿,这应该是一个出口!” 它不是真正的对象类型——它实际上被预处理器擦除了。但是,如果您指定插座是 UIVIew 类型,IB 将确保它只能连接到 UIView 类型的东西。