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

编程入门 行业动态 更新时间:2024-10-24 06:37:29

iOS 类的分类、非正式<a href=https://www.elefans.com/category/jswz/34/1771197.html style=协议、延展"/>

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文件直接实现,不需要另外一个单独文件.这时候写在延展中的成员是这个类的私有成员,只能在本类中访问.

更多推荐

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

本文发布于:2024-03-12 19:29:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1732241.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:协议   iOS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!