当我们想为一个类增添新功能时,常常会考虑组合与继承. 在objective-C中存在着一个与组合在某些方面类似的特性:类目(category, 有些书也翻译为'分类').
类目与组合一样,都不用通过继承,而对原有类进行了功能的扩展.比如有这么一个类,
@interface Dog
{
int age;
}
-(void) eat;
-(void) drink;
@end
现在通过定义类目增加两个方法:说话和玩球,
@interface Dog (DogMan)
-(void) talk;
-(void) playBall;
@end
定义类目类似于定义类,不同的是类名后不是父类而是类目名称, 冒号也换成了圆括号 .
使用类目需注意的事项:
1)类目可以访问原有类的变量,但不能添加变量,如果要添加变量,可以考虑使用继承
2)可以给内建的类创建类目.如
@interface NSString (NewFeature)
-(void) newFunc;
@end
给内建的NSString增加了新方法newFunc.
3)类目可以重载原有类的方法
4)类目可以把@interface部分放在实现文件中,这样类目增加的方法成了私有方法(当然要调用者不知道实现部分的声明才行)