Objective c 目标C:声明UIButton

Objective c 目标C:声明UIButton,objective-c,properties,Objective C,Properties,如果我想声明一个简单的按钮,我必须同时做以下两件事吗 @interface内部: ui按钮*按钮 及 @属性(非原子,保留)IBUIButton*按钮 财产声明是否足够,或者两者都需要?如果是这样,原因是什么?苹果的伙计们已经通过在clang中添加一个功能(非脆弱的abi Blabla)来消除这种冗余。您可以在@interface ClassName{}中编写@property和@synthesis,而不使用ivar。在@interface中,第一部分是ivar声明。如果要声明属性,则不再需要执

如果我想声明一个简单的按钮,我必须同时做以下两件事吗

@interface内部:

ui按钮*按钮

@属性(非原子,保留)IBUIButton*按钮


财产声明是否足够,或者两者都需要?如果是这样,原因是什么?

苹果的伙计们已经通过在clang中添加一个功能(非脆弱的abi Blabla)来消除这种冗余。您可以在@interface ClassName{}中编写@property和@synthesis,而不使用ivar。

在@interface中,第一部分是ivar声明。如果要声明属性,则不再需要执行此操作。事实上,停止这样做是个好主意,因为这是一个私有的实现细节,您将在头中公开

第二部分是财产申报。这就是你真正需要的。但是,如果声明属性,还需要合成访问器。在.m文件中,在
@实现
块的顶部,只需坚持

@synthesize button;

@synthesis
告诉属性将什么ivar用于其备份存储。在现代运行时(即iOS和64位OS X)上,它还将为您合成ivar。因此,我想如果您正在编写32位OS X代码,您仍然需要ivar声明,但这是唯一一次。

我想您指的是自动@synthesis属性。我们已经有了非脆弱的ivar一段时间了。公平地说,32位OS X程序仍然存在非脆弱的ivar问题,但iOS和64位OS X没有,这就是现在大多数开发的地方。我仍然有点困惑。如果我有一个第三方基类没有使用这样的功能,我可以用这样的自动合成属性对它进行子类化吗?只要你的目标是iOS或64位OS X,你就可以合成iVAR。唯一不能合成的时候是你的目标是32位OS X。