1.当我们定义一个成员变量的时候,并且提供了标准的setter和getter函数时,我们就有两种方式来操作成员变量:
@interface Dog : NSObject
{
int age;
}
- (void) setAge:(int) newAge;
- (int) age;
@end
@implementation Dog
- (void) setAge:(int) newAge
{
age = newAge;
}
- (int) age
{
return age;
}
@end
第一种方式: [ ]
Dog *dog = [[Dog alloc] init];
[dog setAge:10];
int dogAge = [dog age];
第二种方式: ' . '
dog.age = 20;
dogAge = dog.age;
注解:第二种方式看起来像似在直接访问成员变量age,但实质上和第一中方式完全一样,在编译器编译的时候,会把第二种形式转换成第一种形式来执行
2.使用@property 和 @synthesize 来代替成员变量的setter和getter函数(@synthesize 和成员变量的声明都可以省略)
@interface Dog : NSObject
@property int age;
@end
@implementation Dog
@end
注解:@property 会告诉编译器生成setter和getter函数
3.@property 告诉编译器生成的setter和getter函数的函数名为:
setter函数是:set+属性名(首字母大写)
getter函数是:属性名
属性名 setter函数名 getter函数名
age setAge age
_age set_age _age
4.利用@synthesize 可以根据属性名来指定成员变量的名字
@property int age;
@synthesize age = _age;(指定成员变量的名字为_age,那么在类内使用这个成员变量的时候,只能使用_age;
也可以不指定,那么编译器也会默认的给变量命名,命名的规则是在属性名签名加上'_',如果属性名是_age,那么
变量的名字为__age)
5.当利用@property 生成的setter和getter函数不能满足要求的时候,我们会重写setter和
getter函数,那么@synthesize 必须要写,不然就会报错