分类
概念:Category 分类是OC特有的语言,依赖于类。
分类的作用:在不改变原来的类内容的基础上,为类增加一些方法。
添加一个分类:
注意:
(1)分类只能增加方法(包括类方法和对象方法),不能增加成员变量
(2)在分类方法的实现中可以访问原来类中的成员变量;
(3)分类中可以重新实现原来类中的方法,但是会覆盖掉原来的方法,导致原来的方法无法再使用(警告);
(4)方法调用的优先级:分类->原来的类->父类,若包含有多个分类,则最后参与编译的分类优先;
(5)在很多的情况下,往往是给系统自带的类添加分类,如NSObject和NSString,因为有的时候,系统类可能并不能满足我们的要求。
(6)在大规模的应用中,通常把相应的功能写成一个分类,可以有无限个分类,对原有类进行扩充,一般分模块写,一个模块一个分类。
例如:
(1)给NSString类增加一个类方法,计算某个字符串对象中阿拉伯数字的个数;
(2)给NSString类增加一个对象方法,计算当前字符串对象中阿拉伯数字的个数;
//声明方法
#import <Foundation/Foundation.h>
@interface NSString (Number)
+ (int)numberCountOfString:(NSString *)str;//声明类方法
- (int)numberCount;//声明对象方法
@end
//方法实现
@implementation NSString (Number)
+ (int)numberCountOfString:(NSString *)str
{
// int count = 0;
// for (int i=0; i<str.length; i++) {
// unichar c = [str characterAtIndex:i];
// if (c>='0' && c<='9') {
// count++;
// }
// }
// return count;
//
return [str numberCount];//调用对象方法
}
- (int)numberCount
{
int count = 0;
for (int i=0; i<self.length; i++) {
unichar c = [self characterAtIndex:i];
if (c>='0' && c<='9') {
count++;
}
}
return count;
}
@end
//测试
#import <Foundation/Foundation.h>
#import "NSString+Number.h"
int main()
{
//int count = [NSString numberCountOfString:@"12wwcecw43454"];
int count = [@"sfewfw343332fefe" numberCount];
NSLog(@"%d",count);
return 0;
}