(一)@property
1.0 定义:@property 数据类型 属性名称;
1.1 作用:在×××.h中用来代替标准的属性get和set方法。
1.2使用:首先找到***.h文件,根据前几章节,在oc中一个完整的类有两个文件组成,一个是***.h(属性方法定义声明) 一个 是***.m(方法实现),假如在***.h中有属性_age和_name, 那么原本我们需要通过写-(void)setAge;......,现在使用@property可以完全代替这两类get 和set方法,具体如下:
以上代码的@property int _age ,就相当于 -(void) set_age:(int)age; -(int)age;这两个方法的声明。其他的一样。
(二)@synthesize
2.0 定义:@synthesize 属性名称
2.1 作用:在***.m文件中用来代替标准的get和set方法的实现。
2.2 使用:找到***.m文件,在该文件中来实现***.h中声明的方法,由于每次都要写get和set的实现,所以我们可以使用 @synthesize来代替***.m中的get和set实现。
很明显以上代码的@synthesize _age 表示
-(void)set_age:(int)age{
_age=age;
}
-(int)_age{
return _age;
}
(三)在main.m中测试 代码如下
运行程序得出的结果是 name is 007 and age is 100。
(四)深入@property和@synthesize综合
在这两个一起使用的时候,我们用@property定义属性,并且声明方法(这里的声明有个特征,例如直接属性名字为age 那么编译器自动生成的属性名称为_age,方法为set_age和_age)。
用这个@synthesize实现的时候,语法是:@synthesize 属性名称,这里的属性名称可以随便取,但是这个随便取的名称需要和 ***.h中的属性名称关联,当在属性名称和×××.h中的属性名称不一样的时候需要这样: @synthesize 属性名称=属性名称 (***.h中自动生成的属性名称) 如: @synthesize age=_age.
如果是一样的则不需要 @synthesize 属性名称=属性名称(***.h中自动生成的属性名称),直接@synthesize 属性名 称即可。
注意:
1,@property和@synthesize的使用并不和以前学的get和set冲突,当有其他的需求的时候我们仍然需要在***.h中定义,在***.m中实 现。
2,他们可以交叉使用,如图: