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也不用写了!
在以后的开发中我们就这样写,很方便。但我们也要清楚它最本质的代码写法。