2011-09-08 62 views
1

如果我想声明一个简单的按钮,我必须做这两个以下的事情吗?Objective-C:声明一个UIButton

内@interface:

UIButton *button;

@property (nonatomic, retain) IBOutlet UIButton *button;

是财产申报不足,或两者都需要?如果是这样,为什么?

回答

2

第一部分,在@interface中是一个伊娃尔宣言。如果你声明一个属性,你不再需要这样做。事实上,停止这样做是一个好主意,因为这是您在头文件中公开的私有实现细节。

第二部分是属性声明。这是你真正需要的。但是,如果您声明该属性,则还需要综合访问器。在您的.m文件,在你@implementation块的顶部,只要坚持

@synthesize button; 

@synthesize告诉使用什么伊娃其后备存储的性能。而在现代运行时(即iOS和64位OS X),它也将为您合成ivar。所以我猜如果你正在编写32位OS X代码,你仍然需要伊娃声明,但这是唯一的时间。

0

苹果公司已经通过添加一个功能(非脆弱的abi blablabla)来剔除这种冗余。你可以在@interface ClassName {}内写入@property和@synthesize,而不使用ivars。

+2

我想你是指自动@synthesizing的属性。我们已经有一段时间没有脆弱的ivars了。 –

+0

对不起,我错了。 – ZhangChn

+0

公平地说,32位OS X程序仍然具有非脆弱的伊娃问题,但iOS和64位OS X不支持,而这正是目前大多数开发的方向。 –