Category
Category的概述
类别(Category)是在现有的类的基础上添加新方法的方式,从而达到扩展已有类的目的。Category提供了比继承更为简洁的方法来对Class进行扩展,使其可以为任何已经存在的class(包括某些框架类)添加方法。新添加的方法同样也会被被扩展的类的所有子类自动继承。
Category的创建和示例
1、首先创建NSString的扩展类,类名为CategoryStr。先选择New file。。。添加新文件
2、然后选中ios中的objective-c File 如图:
3、然后在File Type中选中Category,在Class中输入选择NSString,在File中输入CategoryStr名。如图:
这样扩展类别就建成了。
Category实例
.h文件
@interface NSString (CategoryStr)
//@property(nonatomic,strong)NSString *str;
-(NSInteger)length:(NSString *)str;
@end
.m文件
@implementation NSString (CategoryStr)
-(NSInteger)length:(NSString *)str{
return str.length;
}
@end
调用
NSString *str =@"gjkghkhjhkgk";
NSLog(@"nsstrong length is %ld",[str length:str]);
输出结果:StudyDemo[5562:169167] nsstrong length is 12
Category的局限性
1、无法向类别中添加新的属性(如:@property(nonatomic,strong)NSString *str;),如果调用会导致闪退。然后提示unrecognized selector sent to instance XXX
2、名称冲突,即当类别中的方法与原始类方法名称冲突时,类别具有更高的优先级。类别方法将完全取代初始方法从而无法再使用初始方法。
Category的作用
1、可以将Class的实现分散开,方便代码管理和维护。也可以对框架提供类的扩展
2、创建一个NSObject的类别(也叫创建一个非正式协议),可以作为任何类的委托对象使用。
3、如果其他类中的方法未实现,在你访问其他类的私有方法时编译器报错。这时使用类别,在类别中声明这些方法(不必提供方法实现),编译器就不会再产生警告