OC语言 - 封装 | 设置器和访问器

■ 封装

面向对象的三大特性:封装、继承、多态

在 OC 中我们使用 @interface 和 @implementation 来对类进行管理

1. @interface 就好像暴露在外面的时钟表面,像外界提供展示以及接口

2. @implementation 就好像隐藏在时钟内部的构造实现,把具体的实现封装了起来

 


■ 设置器:setter 方法

在开发过程中考虑到安全性要求,一般不在成员变量名前面使用 @public、@protected 等关键字修饰,而是使用 setter 方法来为对象提供成员变量的值。在 setter 方法的内部也可以对一些不合理的赋值进行筛选过滤

setter 方法命名规范

1. 方法名必须以 set 开头

2. set 后面跟上成员变量的名称且首字母大写

3. 返回值一定是 void

4. 一定要接收一个参数:参数类型需要和成员变量的类型一致

5. 形参名不能和成员变量名一样,苹果官方推荐成员变量名前加 _ 以示区分

代码示例:setter 方法的声明

 1 #import <Foundation/Foundation.h>
 2 @interface Person : NSObject{
 3     // 成员变量
 4     NSString *_name;
 5     NSString *_sex;
 6     NSInteger _age;
 7 }
 8 
 9 // setter 方法
10 - (void)setName:(NSString *)name;
11 - (void)setSex:(NSString *)sex;
12 - (void)setAge:(NSInteger )age;
13 
14 // 自定义方法
15 - (void)changeName:(NSString *)name
16                sex:(NSString *)sex
17                age:(NSInteger)age;
18 
19 // 构造方法,也叫初始化方法
20 // 它是 - 号方法,返回值是 id,且方法名要以 initWith 开头(命名规范)
21 // 它在对象生命周期里只使用一次:在创建对象时使用
22 - (id)initWithName:(NSString *)name;
23 - (id)initWithSex:(NSString *)sex;
24 - (id)initWithAge:(NSInteger)age;
25 - (id)initWithName:(NSString *)name
26                sex:(NSString *)sex
27                age:(NSInteger)age;
28 @end

■ 访问器:getter 方法

getter 方法为调用者返回对象内部的成员变量,是专门获取成员变量值的方法

getter 方法命名规范

1. 一定有返回值且返回值的类型和成员变量的类型一致

2. 方法名和成员变量名一样

3. 不需要接收任何参数

代码示例:getter 方法的声明

- (NSString *)name;
- (NSString *)sex;
- (NSInteger)age;

■ 结语

在实际的开发中 setter/getter 两方法未必都会提供,比如内部成员变量有学号、身份 ID,这样的数据只允许外界读取且不允许修改,通常只会提供 getter 方法

为什么成员变量的命名以下划线开头 ?

1. 其一是为了与 getter 方法名区分开来

2. 其二就是可以和一些其他的局部变量区分开来 

 

posted on 2018-08-06 16:30  低头捡石頭  阅读(60)  评论(0编辑  收藏  举报

导航