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、如果其他类中的方法未实现,在你访问其他类的私有方法时编译器报错。这时使用类别,在类别中声明这些方法(不必提供方法实现),编译器就不会再产生警告

posted @ 2016-02-19 15:20  菜鸟学习之路1.0  阅读(581)  评论(0编辑  收藏  举报