类别是一种为现有的类添加新方法的方式。你可以为任何类添加新的方法,包括那些你没有源代码的类。
类别的声明格式与类的声明格式相似:
@interface NSString(NumberConvenience)
-(NSNumber *)IengthAsNumber;
@end
该声明具有两个特点。首先,现有的类位于@interface关键字之后,其后是位于圆括号中的一个新名称。该声明表示,类别喝的名称是NumberConvenience,而且该类别将向NSString类中添加IengthAsNumber方法。但不能添加新实现变量,因此与类的声明不同的是,类别的声明中没有实例变量部分。
与@interface部分对应的还有一个@implementation部分,你可以在@implementation部分实现自己的方法。
@implementation NSString(NumberConvenience)
-(NSNumber *)lengthAsNumber
{
unsigned int length = [self length];
return ([NSNumber numberWithUnsignedInt:lenght]);
}
@end
类别的局限性:
第一:无法向类中添加新的实例变量。类别没有位置容纳实例变量
第二:名称冲突,即类别中的方法与现有的方法重名。当发生名称冲突时,类别具有更高的优先级。你的类别方法将完全取代初始方法,从而无法再使用初始方法。
类别的作用:
将类的实现分散到多个不同文件或多个不同框架中,
创建对私有方法的前向引用,
向对象添加非正式协议