?
08-Objective-C特有语法:@property、@synthesize
?
1.@property
?
使用在@interface中
用来自动生成setter(设置器)和getter(构造器)的声明 ?
用@property ?int age;就可以代替一下这些代码:?
- (void)setAge:(int)age; ? // setter
- (int)age; ? ? ? ? ? ? ? ?// getter
?
?
?
??
?
?
?
2.@synthesize
?
使用于@implementation中?
用来自动生成setter(设置器)和getter(构造器)的实现?
用@synthesize age = _age就可以代替下面这些代码:
?
- (void)setAge:(int)age
{
? ? _age = age;
}
- (int)age
{
? ? return _age;
}
?
??
?
如果成员变量_age不存在,就会自动生成一个@private私有的变量_age(因为_age声明在@implementation中,故为私有的)
如果为@synthesize age; 此时为指明要去实现哪个age,如果.h文件中又声明一个同名的age成员变量,就会去实现它的setter和getter,否则,在@implementation中自动生成一个age变量,再实现age的setter和getter方法
如果手动实现了setter方法,编译器就会自动实现getter方法
同理,若手动实现了getter方法,编译就会自动实现setter方法
若setter和getter都同时实现了,那么编译器就不会自动生成不存在的成员变量
3.Xcode4.4以后:特性
?
@property囊括了@synthesize的功能,即在@interface中声明@propery int age; 编译器就在.h文件中自动生成了setter和getter方法声明和实现
? ? ? ? ?默认情况下是去访问下划线_age的成员变量
?
此时,@proterty自动生成的成员变量默认就是@protect受保护的(因为在.h文件中声明的成员变量,默认是@protect)
?