如果我想声明一个简单的按钮,我必须做这两个以下的事情吗?Objective-C:声明一个UIButton
内@interface:
UIButton *button;
和
@property (nonatomic, retain) IBOutlet UIButton *button;
是财产申报不足,或两者都需要?如果是这样,为什么?
如果我想声明一个简单的按钮,我必须做这两个以下的事情吗?Objective-C:声明一个UIButton
内@interface:
UIButton *button;
和
@property (nonatomic, retain) IBOutlet UIButton *button;
是财产申报不足,或两者都需要?如果是这样,为什么?
第一部分,在@interface中是一个伊娃尔宣言。如果你声明一个属性,你不再需要这样做。事实上,停止这样做是一个好主意,因为这是您在头文件中公开的私有实现细节。
第二部分是属性声明。这是你真正需要的。但是,如果您声明该属性,则还需要综合访问器。在您的.m文件,在你@implementation
块的顶部,只要坚持
@synthesize button;
的@synthesize
告诉使用什么伊娃其后备存储的性能。而在现代运行时(即iOS和64位OS X),它也将为您合成ivar。所以我猜如果你正在编写32位OS X代码,你仍然需要伊娃声明,但这是唯一的时间。
苹果公司已经通过添加一个功能(非脆弱的abi blablabla)来剔除这种冗余。你可以在@interface ClassName {}内写入@property和@synthesize,而不使用ivars。
我想你是指自动@synthesizing的属性。我们已经有一段时间没有脆弱的ivars了。 –
对不起,我错了。 – ZhangChn
公平地说,32位OS X程序仍然具有非脆弱的伊娃问题,但iOS和64位OS X不支持,而这正是目前大多数开发的方向。 –