就像我理解的那样,@synthesize实际上是在生成Getters和Setters。但是什么是@property呢?它只是为那个很酷的@synthesize魔术函数设置参数吗?
答案 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默认执行的操作。