首页 > 代码库 > IOS_OC_Category

IOS_OC_Category

1.Category概述

那的Category的使用场景有那些呢:

1、类包含了很多个方法实现,而这些方法需要不同团队的成员来实现

2、当你在使用基础类库中的类时,你不想继承这些类而只想添加一些方法时。


Category能实现上面的需求,当然也有使用Category是需要注意的问题:

1、Category可以访问原始类的实例变量,但不能添加实例变量,如果想添加变量,那就通过继承创建子类来实现。

2、Category可以重载原始类的方法,不大不推荐这么做,这样会覆盖掉原始类的方法。如果确实要重载,那就通过继承创建子类来实现。

3、和普通接口有所区别的是,在Category的实现文件中的实例方法只要你不去调用它你可以不用实现所有声明的所有方法。


2.实例

@interface NSString (PLUS)

- (int)numberCount;

@end

@implementation NSString (PLUS)

- (int)numberCount
{
    int count = 0;
    NSUInteger len = [self length];
    for (int i=0; i<len; i++) {
        unichar ch = [self characterAtIndex:i];
        if(ch>='0' && ch<='9'){
            count++;
        }
    }
    return count;
}

@end
#import <Foundation/Foundation.h>
#import "NSString+PLUS.h" //import

int main(int argc, const char * argv[])
{
    NSString *s = @"ad7a8da9d9a1d1";
    NSLog(@"%@ len = %d", s, [s numberCount]);
    
    return 0;
}

3.类别的作用

(1)可以将类的实现分散到多个不同文件或多个不同框架中,方便代码管理。也可以对框架提供类的扩展(没有源码,不能修改)。

(2)创建对私有方法的前向引用:如果其他类中的方法未实现,在你访问其他类的私有方法时编译器报错这时使用类别,在类别中声明这些方法(不必提供方法实现),编译器就不会再产生警告

(3)向对象添加非正式协议:创建一个NSObject的类别称为“创建一个非正式协议”,因为可以作为任何类的委托对象使用。

IOS_OC_Category