【iOS】——封装(三大特征之一)

定义

封装:指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类该类所提供的方法来实现对内部信息的操作和访问。

封装的含义:

把该隐藏的隐藏起来,把该暴露的暴露出来。这两个方面通过OC提供的访问控制符来实现。

访问控制符

4个访问控制符:@private、@package、@protected、@public。
访问控制等级:

在这里插入图片描述

各控制符的作用:
1⃣️:@private(当前类访问权限):只能在当前类内部被访问。用于彻底隐藏成员变量。在类的实现部分定义的成员变量相当于默认用这种访问权限。 (私有的:只有该类可以访问,权限最小)
2⃣️:@package(与映像访问权限相同):可以在当前类以及当前类实现的同一个映像的任意地方访问。这个访问控制符用于部分隐藏成员变量。
3⃣️:@protected(子类访问权限):可以在当前类、当前类的子类的任意部分访问。用于暴露部分成员变量。在类的接口部分定义的成员变量默认使用这种访问权限。(受保护的:该类及其子类的成员可以访问,同一个包中的类也可以访问)
4⃣️:@public(公共访问权限):可以在任意部分访问,不管是否处于同一个映像中,不管是否具有父子继承关系。(该类或非该类均可访问,权限最大)
默认:同一个包中的类可以访问。

在这里插入图片描述
注:同一映像就是编译后生成的同一框架或同一个执行文件。

封装演示

假如我们要输入一个人的年龄,年龄要考虑实际情况,所以就要判断一下年龄是否在正常范围之内。

使用@public会使外界可以直接访问,以至于不能起到筛选的作用,所以不能用@public修饰。

setter——getter方法封装

setter的实现

1).将属性的@public去掉,因为一旦写上@public就意味着外界可以直接访问对象的这个属性,外界一旦可以直接访问,那么外界就可以直接为这个属性任意赋值。

2).为类提供一个方法,这个方法专门为这个属性赋值,这个方法就叫作setter。
a.这个方法一定是一个对象方法,因为要为属性赋值。
b.这个方法没有返回值。
c.这个方法的名称必须以set开头,跟上去掉下划线的首字母大写的属性名。
d.这个方法一定是有参数的,参数的类型和属性的类型一定是一致的,参数的名称和属性的名称(去掉下划线)一致。
e.在方法的实现中,判断输入的数据是否符合逻辑。
f.外界想要为对象的属性赋值,那么就调用这个对象的setter方法,将要赋值的数据传入给这个方法。
在这里插入图片描述

getter的实现

经过setter的处理,我们确实可以在为对象的属性赋值的时候做1个逻辑验证。
但是问题就是,在外界无法取出属性的值,所以需要另外一个方法,专门用来返回属性的值,我们可以称之为getter方法。
a.这个方法一定是1个对象方法,因为这个方法做的事情就是取得属性的值并返回。
b.这个方法肯定有返回值,返回值类型和属性的类型一致。
c.这个方法的名称直接就是属性的名称(去掉下划线)。
d.这个方法没有参数。
e.这个方法的实现是直接将属性的值返回。
f.此时,如果外界希望得到属性的值,那么久只需要调用这个getter方法即可。
在这里插入图片描述

主函数

在这里插入图片描述

这样就完成了一次setter——getter方法的封装。

读写属性

1.如果某一个属性只提供了getter方法没有提供setter方法,我们称这个属性为只读属性
2.如果某一个属性只提供了setter方法没有提供getter方法,我们称这个属性为只写属性
3.如果某一个属性同时提供了setter和getter方法,我们称这个属性为可读可写属性
4.如果某一个属性没有提供setter和getter方法,我们称这个属性为私有属性

合成存取

使系统自动合成setter和getter方法只要以下两步:

1.在类接口部分使用 @property指令定义属性。使用@property定义属性时,无须放在类接口部分的花括号里,而是直接放在@interface、@end之间定义,@property放在属性定义的最前面
2.在类实现部分使用@synthesize指令声明该属性即可。

使用@synthesize的语法格式是:

@synthesize property 名 [=成员变量名]

示例:
test.h
在这里插入图片描述

test.m
在这里插入图片描述
主函数
在这里插入图片描述

点语法

OC允许使用简化的点语法访问属性和对属性赋值。
示例:
FKCard.h
在这里插入图片描述
FKCard.m
在这里插入图片描述
主函数:
在这里插入图片描述
效果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值