Category:扩展类或分类
无论一个类设计的如何完美,都不可避免的会遇到没有预测到的需求,那怎么扩展现有的类呢?当然,继承是个不错的选择。但是Objective-C提供了一种特别的方式来扩展类,叫Catagory,可以动态的为已经存在的类添加新的行为。这样可以保证在类的原来的基础上,较小的改动就可以增加需要的功能。使用Category对类进行扩展时,不需要访问其源代码,也不需要创建子类,这样我们可以扩展系统提供的类。Category使用简单的方式,实现了类的相关方法的模块化,把不同的类方法分配到不同的分类文件中。
通过一个简单的例子看看Category如何使用。
先创建一个简单类:Student
Student.h 文件
#import <UIKit/UIKit.h>
@interface Student : NSObject
- (void)hello;
@end
Student.m文件
#import "Student.h"
@implementation Student
- (void)hello
{
NSLog(@"大家好,我是Young");
}
@end
开始创建分类Category
001、command + n,选择Object-C File
002、选择Category和目标类(给某个类添加分类)
003、创建成功,在新文件里写扩充方法
在声明文件和实现文件中用“()”把Category的名称括起来。原类名+Category”的这是约定的文件命名方式。文件的名字显示也是如此
004、使用Category分类,导入头文件,直接调用方法
输出结果
那的Category的使用场景:
1、类包含了很多个方法实现,而这些方法需要不同团队的成员来实现
2、当你在使用基础类库中的类时,你不想继承这些类而只想添加一些方法时。
Category能实现上面的需求,当然也有使用Category是需要注意的问题:
1、Category可以访问原始类的实例变量,但不能添加实例变量,如果想添加变量,那就通过继承创建子类来实现。
2、Category可以重载原始类的方法,不大不推荐这么做,这样会覆盖掉原始类的方法。如果确实要重载,那就通过继承创建子类来实现。
3、和普通接口有所区别的是,在Category的实现文件中的实例方法只要你不去调用它你可以不用实现所有声明的所有方法。