------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
category作为oc中的一种语法,可以为某个具体的类添加额外的方法,并且不用改变原本类的代码,非常方便,但是不可以为类添加成员变量。
以为NSString类添加一个计算字符串中数字字符个数的功能为例,在xcode6.1中为某个类添加分类方法步骤如下:
1.新建分类文件,选择Objective-C File:
2.File填写分类名称,File Type选择Category,Class选择需要添加分类的类。
3.新生成2个文件,NSString+NUMBER.h 和 NSString+NUMBER.m
———-NSString+NUMBER.h文件内容
#import <Foundation/Foundation.h>
@interface NSString (NUMBER)
//输出给定字符串中数字字符的个数
//添加一个类方法
+ (NSUInteger)countOfNumberInString:(NSString*) string;
//添加一个对象方法
- (NSUInteger)countOfNumberInString;
@end
———-NSString+NUMBER.m
#import "NSString+NUMBER.h"
@implementation NSString (NUMBER)
//现实.h文件中添加的方法,计算字符串中数字字符的个数
+ (NSUInteger)countOfNumberInString:(NSString *)string{
NSUInteger count = 0;
NSUInteger length = [string length];
for (int i = 0; i < length; i++) {
char c = [string characterAtIndex:i];
if (c >= '0' && c <= '9') {
count++;
}
}
return count;
}
- (NSUInteger)countOfNumberInString{
return [NSString countOfNumberInString:self];
}
@end
———main.m文件中
#import <Foundation/Foundation.h>
#import "NSString+NUMBER.h" //引入分类的头文件
int main() {
NSString *str1 = @"abc123qwe456xyz7890";
NSString *str2 = @"abcqweyzx7890";
//调用NSString中分类的方法,计算数字字符的个数
NSUInteger count1 = [NSString countOfNumberInString:str1];
NSUInteger count2 = [str2 countOfNumberInString];
NSLog(@"%ld,%ld",count1,count2);
return 0;
}
输出结果:
2014-12-18 11:35:10.236 ocblog6[551:23164] 10,4
从以上例子中可以看出分类的用法很简单,很实用,总结一下分类的细节:
1.分类分为2个文件,一个.h文件,一个.m文件,分别写声明和实现,为类添加分类的写法就是 @interface NSString (NUMBER) 和@implementation NSString (NUMBER) 不需要写继承自谁,main函数的文件中必须要引入分类的头文件才能使用分类添加的方法。
2.分类可以为一个类添加额外的方法而不需要改变原本类的代码,也不需要去继承类才能添加新的方法。
3.分类可以为类添加新的类方法,对象方法,但是却不能添加成员变量。
4.分类如果添加的方法名和类中原本的方法名相同,那么调用类的方法时会先调用分类的同名方法,也就是说分类的同名方法会覆盖本类的同名方法。