之前看书的时候,没怎么注意,但在项目中,才发现它的特别之处。
先来看看他用途:官网大意是这样写的:当你想简单的向一个已知类添加一个方法的时候,你就可以使用它。使用它的时候,命名是有要求的,如下:
@interface ClassName (CategoryName)
@end
在xcode中,建立objective-c文件同级下,有Category class的选项,命名是ClassName+CategoryName。
或许已经发现,分类在某种意义上看有点像是继承,使用场景:
1. 在不创建继承类的情况下实现对已有类的扩展。
2. 简化类的开发工作(当一个类需要多个程序员协同开发的时候,Category可以将同一个类根据用途分别放在不同的源文件中,从而便于程序员独立开发相应的方法集合)。
3. 将常用的相关的方法分组。
4. 在没有源代码的情况下可以用来修复BUG。
在与继承的对比上,继承还可以添加成员变量,而分类不行,只能添加方法,所以当只想添加方法的时候,可以直接用分类即可。另外,在团队合作上,当有几个人需要对同一个类进行开发时,就可以使用分类了。各小组能员之间是互不干扰的。
还有几点需要注意的是:
1、Category可以访问原始类的实例变量,但不能添加实例变量,如果想添加变量,那就通过继承创建子类来实现。
2、Category可以重载原始类的方法,不大不推荐这么做,这样会覆盖掉原始类的方法。如果确实要重载,那就通过继承创建子类来实现。
3、和普通接口有所区别的是,在Category的实现文件中的实例方法只要你不去调用它你可以不用实现所有声明的所有方法。