OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到;

当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如下

// 声明

@interface  类名  (分类名称)

@end

// 实现

@implementation 类名 (分类名称)

@end

2:分类的好处,当一个类比较庞大时,不同的部分可以放到不同的分类中,也方便团队中类的开发;

3:分类使用注意:

  a:分类不能增加成员变量,只能对原类增加方法;

  b:分类方法实现中,可以访问原来类的成员变量;

  c:分类可以写和类同名的方法,但是这样会覆盖掉原来类的方法,导致永远访问不到原来的类的方法,所以不建议这么做;

    调用顺序:分类——找不到方法时去——>原来类——找不到方法时去——>父类;可见分类的调用优先级最高;

  d:当一个类有单个分类时,且每个分类都由同名方法,调用顺序和编译的顺序有关,最后编译的方法会覆盖先编译的方法,所以最后编译的会被调用;

 

 

 

分类的应用:给NSString增加方法,计算一个字符串中数字的个数;

// 在NSString+intSum.h文件中
//  对NSString类添加一个类方法和对象方法,计算字符串中整数的个数;

#import <Foundation/Foundation.h>

@interface NSString (intSum)


//对NSString类添加一个类方法,计算字符串中整数的个数,声明
+ (int)intSum:(NSString *)str;

// 对象方法的声明
- (int)intCount;

@end


// 在NSString+intSum.m文件中

@implementation NSString (intSum)

// 类方法的实现
+ (int)intSum:(NSString *)str
{
    int count = 0;
    for (int i = 0; i<str.length; i++) {
        int temp = [str characterAtIndex:i];
        if (temp > '0' && temp < '9') {
            count++;
        }
    }
    return count;
}


// 对象方法的实现,只需调用类方法就可以了;
- (int)intCount
{
    return [NSString intSum:self];
}

@end


// 在main中测试

int main()
{
    
    int sum = [NSString intSum:@"234df56"]; // 调用类方法
    
    int count = [@"234sd454545" intCount]; // 调用对象方法


    NSLog(@"sum=%d, count=%d", sum, count);
    return 0;
}

 

 

posted @ 2014-05-11 01:16  随遇不安  阅读(2284)  评论(0编辑  收藏  举报