一、@property用法
- @property会自动生成某个成员变量的setter和getter声明;
- 用@property int age;就可以代替下面的两行:
- (void) intAge:(int)age; // setter
- (int) age; // getter
- @property int age;一般只写age就行,不要写_age,因为这样生成的set方法名字是set_age,调用容易出错,所以只在成员变量里面写_age,@property后面只写 int age ,即可。
- @property新特性:
- Xcode较新版本4.X之后,@property就独揽了@synthesize的功能,也就是说只有@property就可以同时生成setter和getter的声明的实现。
- 默认情况下,setter和getter方法中的实现,会去访问下划线_开头的变量。
二、@synthesize用法
- @synthesize用在@implementation中
- 用来自动生成setter和getter的实现
- 用@synthesize age = _age;就可以代替下面两段代码:
- ( int )age{
return _age;
}
- (void) setAge : (int )age{
_age = age;
}
@synthesize的细节:
- @synthesize age = _age;
setter和getter实现中会访问成员变量_age
如果成员变量_age不存在,那就会自动生成一个@private的成员变量_age
- @synthesize age;
setter和getter实现中会访问成员变量age
如果成员变量age不在,就会自动生成一个@private的成员变量age
- 手动实现:
若手动实现了setter方法,编译器就只会自动生成getter方法
若手动实现了getter方法,编译器就只会自动生成setter方法
若同时实现了setter和getter方法,编译器就不会自动生成不存在的成员变量
代码还可以精简到只写一行@property int age;【这时候系统做三件事:1,自动生成成员变量;2,自动生成age的set和get的声明。3,自动生成age的set和get的实现方法。不过这个时候的成员变量是私有的。子类不能访问】