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. 其二就是可以和一些其他的局部变量区分开来
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律