IBOutlets总是需要.h文件中的实例变量吗?

时间:2011-05-01 08:46:35

标签: iphone objective-c

有时我会将以下代码看作两种不同的格式:

格式1:

#import <UIKit/UIKit.h>
@interface MyViewController : UIViewController {
    IBOutlet UILabel *myText;
}

@property (retain, nonatomic) UILabel *myText;

-(IBAction)buttonPressed:(id)sender;
@end

格式2:

#import <UIKit/UIKit.h>
@interface MyViewController : UIViewController {

}

@property (retain, nonatomic) IBOutlet UILabel *myText;

-(IBAction)buttonPressed:(id)sender;

@end

哪种格式正确?为什么呢?

2 个答案:

答案 0 :(得分:3)

为了澄清Hack Saw所说的内容,并更直接地回答你的问题,将IBOutlet放在你的财产声明或你的实例变量声明中并不重要。

Hack Saw试图说的是IBOutlet和IBAction对编译器都没有任何意义(IBAction被编译成void)。它们存在的唯一原因是Interface Builder解析文件并列出开发人员认为应该关注的所有对象和方法。

答案 1 :(得分:2)

IBOutlet是界面构建器的标记,用于查找声明,并在IB的下拉列表中使用它们。

如果您希望IB将IB对象连接到代码中的引用,例如,将按钮连接到UIButton *声明,则严格要求它们。

所以,这里的基本思想是Interface Builder有一个它知道如何制作的对象列表。你可以在代码中创建这些对象,但很多时候,你不需要比IB提供的更多的功能,这实际上是相当多的。

在这些情况下,IB完全负责该对象。它分配它,并设置各种参数,并负责显示它。

然而,在大多数情况下,你显然也需要能够与它交谈。为了做到这一点,你声明一个指向对象的指针,比如UIButton * mybutton,但是为了让IB知道你想要连接它,你可以将IBOutlet添加到声明中。

IB列出变量,将按钮连接到文件所有者中的某个内容,或者有时是firstresponder,然后IB保存该连接数据,并在nib加载时设置所有内容。