ios – 连接IBOutlets,变量,属性还是两者兼而有之?

将IB与辅助视图结合使用时,您可以控制 – 将IB中的元素拖动到.h文件并创建插座.您可以将其拖动到变量声明块内部或块外部的2个位置之一.

如果你在变量块中拖动它,你会得到这样的结果:

@interface MyViewController : UIViewController {
    IBOutlet UIButton *foo;
}

将它拖到块外面会给你带来类似……

@interface ViewController : UIViewController {
}
@property (retain, nonatomic) IBOutlet UIButton *foo;

我已经考虑过他们的不同之处,我有点困惑.好吧,我理解合成属性在运行时会做一些魔术并创建实例变量(仅限64位/ ARM).所以我相信我理解这两个选项是如何工作的.

什么是最好的选择?第一个选项生成的代码更少,看起来更简单.

第二个版本提供公共访问器/ mutator,但我很少从我的课外访问插座(如果我这样做,它几乎总是使用封装).从我开始iOS工作开始,我就专门使用了这个选项.

在大多数情况下,我是否遗漏了任何东西,还是应该切换到基于变量的插座?

最佳答案 在属性声明中声明IBOutlet的能力是相对较新的@property(保留,非原子)IBOutlet UIButton * foo;

以前,您必须在花括号内声明IBOutlet UIButton * foo,然后合成属性.现在,在花括号中声明IBOutlet是多余的.

您现在有两种方法可以声明属性.选项1是在.h文件中声明它,这将使其公开.或者,您可以使用以下命令在.m文件中创建专用接口:

@interface MYCLASS()
@end

并在那里宣布你的财产.这是我首选的方法,除非我需要公共访问该属性(如果你遵守MVC约定,这应该是例外,而不是常态).

点赞