1、分类概念
Category有很多种翻译: 分类\类别 \ 类目 (一般叫分类)
Category是OC特有的语法, 其他语言没有的语法(类似于C#语言中的”扩展方法”和”partial”关键字)
2、类别的作用
在不修改原有的类的基础上增加新的方法
一个庞大的类可以分模块开发
一个庞大的类可以由多个人来编写,更有利于团队合作
3、使用分类的目的
1)对现有类进行扩展;
2)作为子类的替代手段;
3)对类中的方法归类。
4、声明和实现
//声明
@interface 类名(分类名)
@end
//实现
@implementation 类名(分类名)
@end
注意事项
1)分类只能增加方法,不能增加属性
2)分类方法实现中,可以访问原来类中的成员
3)分类可以重新实现原来类中的方法,但会覆盖掉原来的方法,会导致原来方法无法使用
4)方法调用优先级:分类(最后编译的先执行)——>原来的类——>父类
5、分类的应用
给系统自带的类扩充方法
1)给NSString 增加一个类方法,计算字符串中数字的个数
2)给NSString 增加一个对象方法,计算字符串中数字的个数
//.h文件中
#import <Foundation/Foundation.h>
@interface NSString(Number)
//类方法
+(int)numberOfCountToString(NSString *)str;
//对象方法
-(int)numberCount;
@end
//.m文件中
#import "NSString+Number.h"
@implementation NSString(Number)
//类方法
+(int)numberOfCountToString(NSString *)str
{
//设定计数器,初值为0
int count = 0;
//for循环
for(int i = 0;i < str.length;++i){
//依次取出
unichar c =[str characterAtIndex:i];
if(c>='0'&& c<='9')
{
//计数器+1
count++;
}
}
return count;
//上面的写法可以 这里更简单的方法,调用对象方法
return [str numberCount];
//对象方法
-(int)numberCount
{
//设定计数器
int count = 0;
//for循环依次取出
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()
{
autoreleasepool{
//接收数据
int count1 = [NSString numberOfCountToString;@"sf35sdg34"];
//打印结果
NSLog(@"%d",count1);
//输出结果为4
int count2 = [@"sa3454fd345ds" numberCount];
NSLog(@"%d",count2);//输出结果为2
}
return 0;
}