1、set方法与get方法简介
(1) @public作用域下的成员变量可以被外界任意赋值,往往会产生脏数据(不合理的数据),比如:人的年龄不可能为负。
以后成员变量尽量不要使用@public
(2) 我们可以使用set方法和get方法来管理成员的访问(类似安检,过滤掉不合理的对象)。
(3) 3种操作: a. 只写(set) b. 只读(get) c.可读写(get set)。
(4) get set 方法只用来读写成员变量值,不能对其他方法进行操作。
(5) get set 属于对象方法。
2、set方法
(1) 作用:给外界提供一个方法用来访问或设置成员变量值,可以在方法里面过滤掉一些不合理的值。
(2) set 方法相当于写操作
(3) 命名规范:
1> set方法以减号 - 开头(对象方法);
2> 方法名必须以set开头,set后面跟上成员变量去掉下划线的部分,成员变量的首字母必须大写;
例如: - (void)setAge: (int)age; 方法名是 setAge:
3> 返回值一定是void;
4> 一定要接收一个参数,而且参数类型跟成员变量类型一致;
5> 形参的名称不能跟成员变量名一样。
例如: 成员变量 int _age; 成员变量名称是 _age
对应的set方法:- (void)setAge: (int)age; 形参名称是 age
二者不一样,此处再次体会下划线的好处。
3、get方法
(1) 作用:返回对象内部的成员变量
(2) get 方法相当于 读操作
(3) 命名规范:
1> get 方法以减号 - 开头;
2> 方法名跟形参名称一样,即成员变量名称去掉下划线后剩下的部分
例如: 成员变量 int _age; 成员变量名称是 _age
- (void)setAge: (int)age; 形参名称是 age
- (int)age; get方法名称是 age
3> 肯定有返回值,返回值类型肯定与成员变量类型一致
4> 不需要接收任何参数
例如: - (int)age;
4、成员变量命名规范
1> 成员变量都以下划线_开头
2> 可以跟get方法的名称区分开 _age(成员变量名) age(get方法名)
3> 可以跟其他局部变量区分开,一看到下划线开头的变量,肯定是成员变量
成员变量名称以下划线开头的好处:
1>可以防止与set方法的形参名称以及get方法的方法名重名。
2>可以更加方便地找到想找的成员变量。
5、代码示例
1 #import <Foundation/Foundation.h>
2 //类的声明
3 @interface Car : NSObject
4 {
5 int _wheels; // 轮子个数
6 }
7 /*set方法*/
8 - (void) setWheels:(int)wheels;
9 /*get方法*/
10 - (int) wheels;
11 @end
12
13 //类的实现
14 @implementation Car
15 // set方法的实现
16 - (void) setWheels:(int)wheels
17 {
18 // 对外面传进来的轮子数进行过滤
19 if (wheels<=0)
20 {
21 wheels = 1;
22 }
23 _wheels = wheels;
24 }
25
26 // get方法的实现
27 - (int) wheels
28 {
29 return _wheels;
30 }
31 @end
6、封装的好处
(1)过滤不合理的值
(2)屏蔽内部的赋值过程
(3)让外部不必关注内部的细节