proterty:属性; synthesize:综合,合成;
@property 和 @synthesize在Xcode4.4以前一直都是配合着使用,在4.4以后,@property得到了增强,一行代码编译器就会自动帮我们生成setter和 getter方法的声明和实现,
同时在.m文件中声明一个和属性名一样并且在最前面带有下划线的成员变量 (private);
@synthesize name = _XXX. 就是配合在
生成setter和 getter方法的声明和实现的时候生成一个带下划线的成员变量(private);
例如:
在Person.h中:
Person.h
@interface Person : NSObject {
NSInteger _age; // 声明这个成员变量的作用 和 @synthesize age=_age;
}
@property NSInteger age;
@end;
在Person.m 中:
@implementation Person @synthesize age = _age; - (void)setAge:(NSInteger)age { _age = age; } - (NSInteger)age { return _age; }
- 分析下面代码
@synthesize age = _age; //作用就是生成一个_age成员变量;
- 实际上它的作用是告诉编译器age属性是用_age实例变量生成setter and getter方法的实现;
- 也就是说age属性的setter方法是setAge,它操作的是_age这个变量。
- 通过这个看似像是赋值的一个操作,我们可以在@synthesize中定义与变量名不同的setter和getter的命名,以此来保护变量不会被不恰当的访问。
- 弄明白上述的原理后,我们也就知道了_age和age的区别。
- _age是成员变量
- age是属性
- 我们最后操纵的都是成员变量
注意:
如果使用 @property(assign, nonatomic)NSInteger age;
并实现了Setter和Getter的方法,这时就没有_age这个成员变量;