3

据我了解,@synthesize 实际上正在生成 Getter 和 Setter。但是@property 然后在做什么呢?它只是为那个很酷的@synthesize 魔术函数设置参数吗?

4

4 回答 4

9

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

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

于 2009-04-30T11:34:45.537 回答
8

你在头文件中写@property

@property float value;

相当于:

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

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

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

于 2009-04-30T11:17:10.883 回答
4

@property声明 getter 和/或 setter

@synthesize实现它们。

于 2009-04-30T15:07:12.063 回答
1

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

使用前导下划线是一种常见约定,可让您区分属性和实例变量。属性和实例变量共享相同名称也很常见,这是 @synthesize 默认所做的。

于 2014-07-14T11:10:14.817 回答