11-分类category

1. 分类.
类别、类目、category
2. 写1个学生类:类中有很多个方法.
吃 喝 拉 撒 睡.... 基本行为
学习、敲代码、写书.... 学习
玩Dota 玩LOL 玩CF.... 玩
爬山、跑步、踢足球..... 运动
......
如果将这些方法都写在同1个类模块中.当然完全是可以的.
如果全都写在一个模块中,就显的很臃肿. 后期难以维护和管理.
默认情况下1个类独占1个模块.这个是将所有的成员都写在这1个模块中.就很男管理.
我们的想法: 那就让1个类占多个模块.将功能相似的方法定义在同1个模块中.
这样的好处: 方便维护和管理.
如何将1个类分成多个模块呢?
3. 分类:
1). 顾名思义: 将1个类分为多个模块.
2). 如何为1个类添加分类.
3). 会生成1个.h 和1个.m的模块.
a. 模块的文件名: 本类名+分类名.h 本类名+分类名.m
UIView+Util.h UIView+Util.m
4). 添加的分类也分为声明和实现.
@interface 本类名 (分类名)
@end
代表不是新创建1个类.而是对已有的类添加1个分类. 小括弧中写上这个分类的名字.
因为1个类可以添加多个分类 为了区分每1个分类.所以分类要取名字.
@implementation Student (itcast)
@end
这是分类的实现.
4. 分类的使用.
1) 如果要访问分类中定义的成员,就要把分类的头文件引进来.
5. 分类的作用: 将1个类分为多个模块.
--------------------------------------------
使用分类注意的几个地方:
1. 分类只能增加方法,不能增加属性
2. 在分类之中可以写@property 但是不会自动生成私有属性. 也不会自动生成getter setter的实现.
只会生成getter setter的声明.
所以,你就需要自己写getter 和 setter的声明. 也需要自己定义属性 这个属性就必须在本类中.
3. 在分类的方法实现中不可以直接访问本类的真私有属性(定义在本类的@implementation之中)
但是可以调用本类的getter setter来访问属性.
本类的@property生成的私有属性,只可以在本类的实现中访问.
分类中不能直接访问私有属性 真.
分类可以使用 getter setter 来访问.
4. 分类中可以存在和本类同名方法的.
当分类中有和本类中同名的方法的时候,优先调用分类的方法.哪怕没有引入分类的头文件.
如果多个分类中有相同的方法,优先调用最后编译的分类.
------------------------------------
什么时候需要使用分类.
当1个类的方法很多很杂的时候. 当1个类很臃肿的时候.
那么这个时候我们就可以使用分类. 将这个类分为多个模块.将功能相似的方法写在同1个模块之中.



猜你喜欢

转载自blog.csdn.net/daidaishuiping/article/details/80207484