协议、延展"/>
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)给已经存在的类添加方法,其他所有继承与这个类的对象都会有这个方法.
三、延展:
延展是一个特殊的分类,也是类的一部分
特殊之处:
- 延展的分类没有名字.
- 只有声明没有实现,也就是只有.h文件;和本类共享一个实现
新建:
Person+itexten是它的扩展文件名.
在延展类中定义的方法声明要在本类中实现.
什么时候使用:
当我们想要为类定义私有成员的时候,就可以使用延展。将延展定义在这个类的实现文件中。
如果想要为类写1个真私有属性,量然我们可以定义在aimplementation之中•但是不要这么写 这样很不规范。
写1个延展。将这个私有属性定义在延展中。
如果要为类写1个私有方法,建议将声明写在延展中,实现写在本类的实现中。提供代码的阅读性
四、总结:
1.延展有点相当于Java中的继承,为一个类新增成员.
2.分类中名字,延展没有名字,是一个匿名的分类.
3.每一个分类都有声明和实现,而延展只有声明,没有单独的实现,和本类共用一个实现.
4.分类中只能增加方法,延展可以增加任意的成员.
5.分类中可以写@property,但是只会生成setter和getter的声明,延展中写@property的话,一切正常
6.延展100%情况下,可以在本类中.m文件直接实现,不需要另外一个单独文件.这时候写在延展中的成员是这个类的私有成员,只能在本类中访问.
更多推荐
iOS 类的分类、非正式协议、延展
发布评论