@property

2017-06-12  本文已影响0人  cmhfx1

@property是什么?

@property是一个是编译器特性,在Xcode 4.4之前,编译器会自动生成setter和getter方法的声明。

例如:作为方法声明,为别的文件调用,位置则在

@interface

@property NSInteger age;

@end

等价于

@interface

- (void)setAge:(NSInteger)age;

- (NSInteger)age;

@end

生成的setter,getter方法声明,存在一定的格式


存在方法声明自然对应着方法实现,因此,还存在另一个

@synthesize 

自动生成setter/getter方法的实现。例如:

作为方法的实现,位置则在

@implementation

@synthesize name; //@synthesize age = age;

@end

左边是属性名,右边是实例变量。如果实例变量不存在,就会创建,但这是一个私有的成员变量, 是在.m文件中生成的, 不是在.h文件中生成的(extension)

@interface Person ()

{

NSString *_name;

}

@end

因此,无法在类外直接通过->_name访问

如果我们实现了setter/getter方法的话,那么编译器便不会再生成相应的setter/getter的实现;如果我们setter和getter均实现,则编译器不但不会生成setter和getter方法的实现,也不会生成默认形式的实例变量,即使实例变量不存在。即@synthesize age = _age;  是无效的


Xcode4.4之后,@property 进行了增强,@synthesize可以省略,默认写法 @synthesize age = _age;

上一篇下一篇

猜你喜欢

热点阅读