@synthesize 关键字
6.1 问题: setter, getter的实现也是没有什么任何技术含量
6.2 作用: 自动生成getter、setter方法的实现.
6.3 语法: @synthesize @property名称; 如:
@interface Person : NSObject{
int _age;
}
@property int age;
@end
@implmentation Person
@synthesize age;
@end
6.4 原量:
@implementaion Person{ int age; }
- (void)setAge:(int)age{ self->age = age; }
- (int)age{ return age; }
@end
等价于上面的原始写法:
@implmentation Person
@synthesize age;
@end
1 生成1个真私有的属性.属性的类型和@synthesize对应的@property类型一致. 属性的名字和@synthesize对应的@property名字一致.
2 自动生成setter方法的实现. 实现的方式: 将参数直接赋值给自动生成的那个私有属性.并且没有做任何的逻辑验证.
3 自动生成getter方法的实现. 实现的方式: 将生成的私有属性的值返回
6.5 希望@synthesize不要去自动生成私有属性了. getter setter的实现中操作我们已经写好的属性就可以了.
1 语法: @synthesize @property名称 = 已经存在的属性名;
如: @synthesize age = _age;
2 不会再去生成私有属性. 直接生成setter getter的实现,
setter的实现: 把参数的值直接赋值给指定的属性. { _age = age; } 与原始写法一样
gettter的实现: 直接返回指定的属性的值. { return = _age; } 与原始写法一样
3 注意:
1). 如果直接写1个@synthesize 如: @synthesize name;
2). 如果指定操作的属性. 如: @synthesize name = _name;
3). 生成的setter方法实现中 是没有做任何逻辑验证的 是直接赋值.
生成的getter方法的实现中 是直接返回属性的值.
如果setter或者getter有自己的逻辑验证 那么就自己在类的实现中 重写(原始写法)就可以了.
4 批量声明:
1). @property的类型一致. 可以批量声明.
@property float height, weight;
2). @synthesize也可以批量声明. (类型不一致是可以的)
@synthesize name = _name, age = _age, weight = _weight, height = _height;