@property和@synthesize有什么区别?

时间:2009-04-30 10:56:36

标签: objective-c cocoa-touch uikit properties

就像我理解的那样,@synthesize实际上是在生成Getters和Setters。但是什么是@property呢?它只是为那个很酷的@synthesize魔术函数设置参数吗?

4 个答案:

答案 0 :(得分:9)

@property将名称声明为属性。这意味着,可以通过点语法(object.value)访问它。

@synthetize可以看作是一个宏,它创建了getter和setter方法。知道您可以覆盖这些方法很有用,即使您键入@synthetize也是如此。

答案 1 :(得分:8)

你在头文件

中写@property
@property float value;

相当于:

- (float)value; 
- (void)setValue:(float)newValue; 

它获取其他类的信息,您的类具有此方法

@synthesize phisicaly在类实现中创建这些方法

答案 2 :(得分:4)

@property声明getter和/或setter

@synthesize实现了它们。

答案 3 :(得分:1)

有一个常见的误解是,为了实现使用@property指令创建的setter和getter,需要@synthesize指令,但事实并非如此。使用不带@synthesize的@property指令仍会生成setter / getters,并允许您使用点表示法。但是,省略@synthesize指令将导致编译器生成具有前导下划线字符的相应实例变量,例如属性myVar将具有_myVar的实例变量。

使用前导下划线是一种常见的约定,允许您区分属性和实例变量。属性和实例变量共享同一名称也很常见,这是@synthesize默认执行的操作。