-----------android培训、java培训、java学习型技术博客、期待与您交流!-----------
OC中@property、@synthesize关键字
一、@property关键字
@property是编译器的指令,用来告诉编译器声明属性的访问器(gettr/setter)方法,
特点:免去手工书写get和set方法
一般形式:
@property 类型名 方法名
如:@property int age;
相当于进行了age的set和get方法的声明
-(void) setAge:(int) age;
-(int)age;
如果方法名的类型相同可以写在同一行。如:@property int age, height, weight;
@property的作用
1、在Xcode4.4之前,用于帮我们实现get/set方法的声明
2、在xcode4.4之后,有增强功能,只是用@property而不使用@synthesize关键字
3、声明和实现了_age , _name的get和set方法
4、操作的是带有下划线的实例变量
5、如果当前类中,没有下划线的实例变量,则系统会自动生成
6、在.m文件中,生成一个 _score的变量,该变量是私有的,不能被子类继承和访问
二、@property使用注意事项
1、 @property 只能写在@interface ...@end中
2、 @property 用来自动生成成员变量的get/set方法声明(在Xcode4.4以前)
3、 告诉property要生成的get/set方法声明的成员变量类型是什么
4、 告诉property 要生成的get/set方法是哪个属性的,属性名称去掉下划线
5、 @property 生成的 _age, _name 都是私有变量,是隐藏的,子类和其他类都看不到也不能被继承和
访问
三、@synthesize关键字
@synthesize 关键是在.m文件中定义set和get方法的实现
作用:实现get和set方法,写在@implementation...@end中
一般形式:@synthesize 方法名
如:@synthesize age
相当于实现了set/get方法,自动生成一个age变量
-(void)setAge:(int) age{
self->age = age; // 并没有生成 _age
}
-(int)age{
return age;
}
如果方法名的类型相同可以同时写在一行。如:@synthesize age, height, weight;
四、@synthesize指定实例变量赋值
@synthesize age = _age, weight = _weight;
@synthesize name = _name;
@synthesize 方法名 = 实例变量名
当指定实例变量后,此时不再生成也不再操作默认的实例变量
五、@synthesize关键字使用注意
1、方法名一定要现在.h 文件中使用@property 声明才能使用@synthesize
2、@synthesize 和@property 搭配使用,用于简化set和get方法的声明和实现
六、@property 增强下重写get和set方法
1、以后都使用@property增强格式写get和set方法,除非get和set方法需要子类继承或者访问时才手动书
写get和set方法
2、当用set/get方法对实例变量赋值不合法时,需要对值进行过滤,此时需要重写set/get方法
3、set / get方法只能重写一个,不能同时都重写,两个要都重写时需要用@synthesize才可以重写