概要:本文循序渐进地介绍了@property关键字的使用,以及为什么要这样使用,也许了解了过去的用法,才更能体会如今用法的方便把!
一、get和set方法的使用
我在前文说过,类和C语言中的结构体很像,也有一些变量用来形容事物的属性(成员变量),既然有属性就需要进行初始化,下面就来介绍传统初始化的方式
1.传统的get、set方法
首先让我们来了解一下传统get、set方法的写法,从字面就可以看出get方法用来获取值,set方法用来设置值,get、set方法书写有一些规范需要遵守。首先让我们先来看一段代码,结合代码来分析get、set方法的书写规范。
(1)set方法书写方法:
1)一定是对象方法
2)没有返回值
3)set开头,去掉下划线的实例变量名首字母大写
4)有参数,参数类型和实例变量类型一致
5)形参的命名方式为去掉下划线的实例变量名
(2)get方法书写方法
1)一定是对象方法
2)一定有返回值,返回值类型与成员变量类型一致
3)方法名称是去掉下划线的实例变量名
这样乍一看起来,要注意的地方可真是不少,要多写写才能自然地掌握,不过还好后续还有更简便的工具来让我们设置实例变量。
(3)get、set方法的调用
传统方法:
也可以使用“点语法”
但有几点注意事项:
1)把原来的[stu setAge:10]替换成了stu.age = 10。这两种写法是完全等价的。即这里的stu.age并不是代表直接访问stu对象的成员变量age,而是编译器遇到stu.age = 10的时候 会自动将代码展开成[stu setAge:10]
2)把原来的int age = [stu age]替换成了int age = stu.age。这两种写法又是完全等价的, stu.age并不是直接访问stu对象的成员变量age,而是编译器遇到int age = stu.age的时候会自 动将代码展开成int age = [stu age]
3)OC点语法的本质是方法调用,不是直接访问成员变量。至于这个点语法代表的是get方法还是 set方法,那就取决于你是取值还是设值(也可以理解为点语法是在“=”的左侧还是右侧,左 侧:如 stu.age=…. 这就是调用set方法,右侧 … = stu.age 这就是调用get方法),取值 就是get方法,设值就是set方法。
看到这里,可能已经有人要晕了,访问个成员变量而已,要不要这么麻烦啊,规矩还这么多,有没有更简单的方法呢,下面我们就来介绍简便方法啦。
二、@property关键字的使用
1.@property的用途
@property告诉编译器声明属性的访问器(getter/setter)方法,免去我们手工书写get和set方法繁琐的代码
2.@property的用法
@property 类型名 方法名
3.@synthesize用法
1) @synthesize age; 表示生成.h中变量age的get和set方法的实现,如果要使用@synthesize的话, 变量名要先在.h文件中声明
2)@property和@synthesize搭配使用,用于简化set和get方法的定义和实现
但是显然这样还不够简便,我们还是需要先定义成员变量,然后再用@property关键字在.h文件中声明,还需要在@synthsize在.m文件中实现,依旧很麻烦
4)@property增强
XCODE(4.4后)终极的解决方案是:@property int score;
成员变量定义、声明、实现全套一体化实现
总结:经过循序渐进地演变,终于把成员变量初始化的方法从一开始的多文件多函数操作精简成只有一句话,赞叹语法优美的同时也让我感慨事物总是向越来越好越来越方便的方向发展的,也许人生也是如此吧,加油!