Sian 发表于 2014-3-17 11:32:33

@property的作用

本帖最后由 Sian 于 2014-3-17 14:59 编辑

三步曲:
1、只能写在类声明文件(.h文件)中,并且会自动声明成员变量的setter和getter方法;
2、如果在类实现文件中没有实现成员变量的setter和getter方法,将替代@synthesize的功能,实现这两个方法;
3、在实现setter和getter方法时如果发现没有相关成员变量,同时会自动生成相应的成员变量;

注意:
三步曲当中是有先后顺序的
1、如果已经有了setter方法或getter方法的声明则@property不会生成相应的方法声明;
2、如果已经有了setter方法或getter方法的实现,则不会替代@synthesize去生成相应的方法实现;
3、如果有相关成员变量则不生成相应的成员变量;
4、如果setter方法和getter都有实现并且没用到任何成员变量(空实现),同样不会生成相应的成员变量,在debug中可以看到成员变量为空。

示例:
@property int age;
这一句代码编译器展开后为:
1、生成相应的setter方法和getter方法声明
- (void)setAge:(int)age;
- (int)age;
2、生成相应的setter方法和getter方法实现(如果没有实现的话)
@synthesize age = _age;
编译器展开后为:
- (void)setAge:(int)age
{
   age = _age;
}
- (int)age
{
    return _age;
}
3、在setter和getter方法实现时需要用到成员变量_age,如果没有声明成员变量_age此时会自动生成_age;

PS:为什么说有先后顺序呢,如果setter方法和getter方法都自己实现,则没有替代@synthesize生成getter和setter方法这一步骤,也就不存在需要使用成员变量_age这一步骤,从而也就不关心是否有成员变量_age,所以原本有就有,没有就没有,编译器不关心成员变量_age的存在性;如果编译器需要使用而又不存在该成员变量时,自动生成;

值得一提的是,编译器自动生成的成员变量,属性都为private
页: [1]
查看完整版本: @property的作用