OC语法5——@property和@synthesize

@property和@synthesize:

  我们回想一下:

  在OC中我们定义一个Student类需要两个文件Student.h 和 Student.m。

  Student.h(声明文件):定义成员变量,并且为了使外界可以访问操作这些成员变量,需要定义set和get方法提供给外界。最后还要定义自定义的功能方法。

  Student.m(实现文件):实现文件实现set和get方法,并且实现自定义的功能方法。

  假如,Student类中有很多个成员变量,那我们若手动定义成员变量,再一个一个声明它们的set和get方法,并且一个一个的在Student.m文件中实现set和get方法,这样无疑是无聊而低效的。

  为了提高开发效率,XCode为了提供了便捷:

  OC中引入了@property关键字。

@property  char *  _name;
@property  int  _age;

在Student.h文件中这样写,XCode编译器会自动生成set和get的方法声明。

注意:千万要注意,@property int _age; 替换的只是set和get方法,所以在花括号里还是要照常定义成员变量,而只在声明set和get方法的地方用@property取代。

 

而在Student.m文件中,用@synthesize可以自动生成set和get方法的实现,从而取代手写代码。

需要说明的是,@synthesize _age; 会自动在Student.h文件中寻找名为_age的成员变量。若有,则实现set和get方法;若无,则在Student.m文件中自己创建个_age成员变量,但该_age是私有的(private)!另外,若这样写@synthesize age; 编译器会自动在.h文件中寻找age,若无,则自动创建一个变量_age。注意,是_age。

 

另外需要说明的是:在XCode 4.5以上版本中,只要编译器检测到了Student.h文件中的@property int _age;不仅会自动在Student.h文件中声明set和get方法,还会自动在Student.m文件中实现set和get方法。

所以,只需开发者在Student.h中写@property int _age; 不仅把不用手写set,get方法的声明和实现了,甚至连@synthesize也不用写了!

在以后的开发中我们就这样写,很方便。但我们也要清楚它最本质的代码写法。

 

posted @ 2015-02-21 06:34  &王先生  阅读(335)  评论(0编辑  收藏  举报