一、用法
1.使用方法(生成和set/get)
@property 变量类型 (去掉下划线的)实例变量名//声明set和get方法
@synthesize 实例变量名//实现set和get方法
例:@interface Person:NSObject
@property int age,weight;
@end
@implementation
@synthesize age,weight;
@end
//这样相当于按照传统方式实现了set和get方法,可以直接用点操作符赋值和调用
Person *p = [Person new];
p.age = 10;
p.weight = 50;
NSLog(@"%d,%d",p.age,p.weight);
2.详解
@property int num;实际是编译器自动将进行了set和get方法的声明,所代替的代码如下:
(void)setNum:(int)num;
(int)Num;
@synthesize num;则替代了set和get方法的实现,代码如下
(void)setNum:(int)num{
class->num = num;
}
(int)Num{
return num;
}
3.注意
通常设定成员变量时会加下划线,例如:int _age;但是如上使用@property和@synthesize时,生成的成员变量并不是加“_”的num,而是num。
4.使用方法(指定成员变量的get/set)
如果已经设置了成员变量int _age;设置set/get方法如下:
@property int age;
@synthesize age = _age;
5.详解
上述方法实现了为已经设定的成员变量设置set和get方法,而@synthesize = _age;实际上是产生了如下效果:
(void)setAge:(int)age{
_age = age;
}
(int)age{
age = _age;
return age;
}
二、增强用法(@property)
1.使用方法
在Xcode4.4版本之后可以只在@interface中声明@property而省略@implementation中的@synthesize。并且这样产生的set\get方法操作对象变成了带下划线的成员变量(如果当前没有声明该变量,则自动生成)。例如:
@interface MyClass:NSObject
@property int num;
-(void)test;
@end
@implementation MyClass
-(void)test{
NSLog(@"_num = %d",_num);
}
@end
注意:生成的变量是私有变量,既不能被子变量继承也不能被使用。
2.重写
在需要校验变量值时,可以手动重写set方法。在上例的基础上如下:
@implementation MyClass
-(void)setNum:(int)num{
if(num<0){
_num = 0;
}else{
_num = num;
}
}
@end
注意:可以手动实现get或set方法,但是只能实现一个,不能同时重写两个方法
|
|