创建IBOutlet或UIView?

时间:2011-07-04 17:20:41

标签: objective-c ios cocoa-touch interface-builder iboutlet

据我所知,在nib文件中引用对象的常用方法是创建一个IBOutlet对象,然后在Interface Builder中将其与蓝线连接。

但我刚刚在Lynda.com上看到一个视频而不是这样做,教练在头文件中创建了一个UIView对象,并将其连接到Interface Builder中的UIView对象。 / p>

所以我的问题是:使用IBOutlet对象而不是简单地使用与IB中对象类相同的对象有什么好处?有区别吗?

2 个答案:

答案 0 :(得分:4)

IBOutlet只是Interface Builder的一个提示。 IBOutlets可以是任何东西。 UIViewUIButtonUITextView

@property (nonatomic, retain) IBOutlet UIView * Foo;

在上面的例子中,什么是Foo? IBOutlet还是UIView?这是两者。但是你的问题不允许这样做。

您可以在此处查看Apple文档:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCTutorial/06Controller/06Controller.html

他们进一步描述了IBOutlet的作用:

  

对象可以与其他对象通信   通过发送应用程序中的对象   消息到网点。一个插座可以   引用任何对象   应用程序:用户界面对象   例如文本字段和按钮,模型   对象(通常是自定义的实例)   类),甚至应用程序   对象本身。奥特莱斯很特别   实例变量,因为它们可以   在Interface Builder中设置。

  

注意:IBOutlet是一个空定义的宏   C预处理器删除了   编译时间。 Interface Builder使用   它来确定出口声明   它可以显示它们   视觉上连接插座。

总结:

IBOutlets几乎可以引用任何东西。它们只是Interface Builder的一个提示,它允许您在加载XIB时设置它们的值。实际上,文本IBOutlet在Interface Builder世界之外的意义如此之少,以至于它从最终产品中被剥离,因为除了帮助Interface Builder之外,它完全不能用于任何目的。

我会回去查看你正在联系的其他一些事情IBOutlets,你肯定会发现他们确实有一些真正的类型。

答案 1 :(得分:2)

IBOutlet只是一个向IB表明的关键词,“嘿,这应该是一个出路!”它实际上不是一种对象类型 - 它实际上是由预处理器擦除的。但是,如果指定出口类型为UIVIew,则IB将确保它只能连接到UIView类型的东西。