iOS 类的分类、非正式协议、延展

一、类的分类:

引入:
举个例子,人这个类有很多的属性和行为;比如说属性有{名字,性别,年龄,等等},行为{吃,喝,拉,撒,睡,学习,写作,考试,唱歌,跳舞,爬山,等等},还有很多很多.

如果只用一个模块来定义一个这么大的类的话,代码量是非常的高,主要是后期修改和维护就很不方便.这时可以引入一个叫分类的东西.把{学习,写作,考试}归为一个模块,{唱歌,跳舞,爬山}为一个模块.
在这里插入图片描述
虽然为一个类添加了两个模块,但是它们还是同属一个类,就还是个person类.

实例:
1.新建一个person的分类:
在这里插入图片描述
2.在分类中定义一个方法(随便来一个):
(itcast)括号中是分类的类名
在这里插入图片描述
这是一个定义在分类itcast中的方法,我们等下看一下在Person中有没有这个study方法.
3.运行查看效果:
在这里插入图片描述
可以看到运行输出结果跟我们预想的一样,Person中是有study这个类的.这就是简单的分类的实现.

4.使用分类需要注意的地方:
(1).分类只能增加方法,不能增加属性
(2).分类中可以写@property,但是只会生成setter和getter的声明,不会自动生成私有属性和setter根getter方法的实现.
(3).分类中不可以直接访问本类找到额属性,但可以通过setter和getter方法间接的访问本类属性.
(4).当分类中有和本类同名的方法时,优先调用分类中的方法;如果多个分类中有同名的方法时,优先调用最后编译的分类中的方法.

5.什么时候使用分类
当一个类中的方法很多很杂的时候,只用一个类很臃肿的时候.
这个时候就可以使用分类的方法,将功能行为相似的方法写在同一个分类中,方便管理.

二、非正式协议:

意思是:为系统自带的类写一个分类就叫做非正式协议

第一节讲的分类其实是自己定义的类中使用.非正式协议是给系统的类写分类,本质上它也是个分类.

1.创建
在这里插入图片描述
其他操作跟分类一样

2.不同的地方和何时使用:
(1).分类是自己创建的类,把类分成多个模块;而非正式协议相当于是对系统的类的补充.
(2)给已经存在的类添加方法,其他所有继承与这个类的对象都会有这个方法.

三、延展:
延展是一个特殊的分类,也是类的一部分
特殊之处:

  1. 延展的分类没有名字.
  2. 只有声明没有实现,也就是只有.h文件;和本类共享一个实现

新建:
在这里插入图片描述

在这里插入图片描述
Person+itexten是它的扩展文件名.

在延展类中定义的方法声明要在本类中实现.
什么时候使用:

当我们想要为类定义私有成员的时候,就可以使用延展。将延展定义在这个类的实现文件中。
如果想要为类写1个真私有属性,量然我们可以定义在aimplementation之中•但是不要这么写 这样很不规范。
写1个延展。将这个私有属性定义在延展中。
如果要为类写1个私有方法,建议将声明写在延展中,实现写在本类的实现中。提供代码的阅读性

四、总结:
1.延展有点相当于Java中的继承,为一个类新增成员.
2.分类中名字,延展没有名字,是一个匿名的分类.
3.每一个分类都有声明和实现,而延展只有声明,没有单独的实现,和本类共用一个实现.
4.分类中只能增加方法,延展可以增加任意的成员.
5.分类中可以写@property,但是只会生成setter和getter的声明,延展中写@property的话,一切正常
6.延展100%情况下,可以在本类中.m文件直接实现,不需要另外一个单独文件.这时候写在延展中的成员是这个类的私有成员,只能在本类中访问.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值