Objective-C中的Category也是非常常用的功能之一。category可以为已经存在的类增加方法,而不需要增加一个子类,另外category使得我们在不知道某个类的内部实现的情况下为该类增加方法。
如果我们想增加某个框架中的类的方法,category就非常有效。通过类别所添加的新方法就成为类的一部分,在运行时,新添加的方法和已经存在的方法在使用上没有任何区别,通过类别为类所添加的方法和别的方法一样会被它的子类所继承。类别接口的定义看起来很像类接口定义,而不同的是类别名使用圆括号列出,它们位于类名后面。类别必须导入它所扩展的类的接口文件,标准的语法格式如下:
#import “类名.h”
@interface 类名 (类别名)
@end
和类一样,类别的实现也要导入它的接口文件,一个常用的命名约定是,类别的基本文件名是这个类别扩展的类的名字后面跟类别名。因此,一个名字为”类名”+“类别名”+“.m”的实现文件看起来就如下:
#import “类名类别名.h”
@implementation 类名 (类别名)
@end
注意:类别并不能为类声明新的实例变量,它只包含方法,然后在类作用域中的所有实例变量,都能被这些类别方法所访问。它们包括为类声明的所有实例变量,甚至那些被@private修饰的变量,可以为一个类添加多个类别,但每个类别名必须不同,而且每个类别都必须声明并实现一套不同的方法。
要记住的是,当我们通过category来修改一个类的时候,它对应用程序里的这个类的所有对象都起作用,跟子类不一样,category不能增加成员变量,我们还可以用category来写类原先的存在的方法。