黑马程序员技术交流社区
标题:
关于 OC -- Category 分类
[打印本页]
作者:
Jack-xie
时间:
2014-10-11 21:24
标题:
关于 OC -- Category 分类
分类的作用:在不改变原来类内容的基础上,可以为类增加一些方法,可以添加对象方法和类方法,利于团队开发
使用注意:
1.分类只能添加方法,不能增加成员变量
2.分类方法实现中可以访问原来类中声明的成员变量
3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用
4.方法调用的优先级:分类(最后参与编译的分类优先)---> 原来类 ----> 父类
声明:
#import "Person.h" // 需要引入头文件,
@interface Person(Jack) // 分类用 () 小括号表示
-(void)study;
@end
实现:
#import "Person+Jack.h" // 分类文件的文件名默认为 主类名+分类名
@implementiaon Person(Jack)
-(void)study
{
NSLog(@"I am studying.");
};
@end
使用:
#import <Foundation/Foundation.h>
#import "Person.h" // 包含主类头文件
#import "Person+Jack.h" // 包含分类文件
int main(){
Person *Person1 = [[Person alloc] init];
[Person1 study]; // 可以对这个类的对象调用分类中的方法
return 0;
}
分类的应用:
给系统自带的类添加分类:
举例:给NSString类添加一个类方法和一个对象方法, 用来计算字符串中阿拉伯数字的个数
#import <Foundation/Foundation.h>
@interface NSString (Number) // 为NSString类添加Number分类
// 给系统的类方法添加一个计算数字的类方法
+(int)getNumberCount:(NSString *)string;
// 给系统的类方法添加一个计算数字的对象方法
-(int)numberCount;
@end
#import "NSString+Number.h"
@implementation NSString (Number)
// 分类方法的实现
+(int)getNumberCount:(NSString *)string{
// 定义变量计算数字的个数
int count = 0;
for (int i=0; i<string.length; i++) {
// 取出i这个位置对应的字符
unichar ch = [string characterAtIndex:i];
// 如果这个字符是阿拉伯数字 让count++
if (ch>='0' && ch<='9') {
count++;
}
}
return count;
}
// 类方法实现二 前提是有下面的对象方法存在
+(int)getNumberCount:(NSString *)string{
return [string numberCount];// 让对象直接调用对象方法
}
// 对象方法的实现
-(int)numberCount{
int count = 0;
for (int i=0; i<self.length; i++) {
unichar ch = [self characterAtIndex:i];
if (ch>='0' && ch<='9') {
count++;
}
}
return count;
}
@end
#import <Foundation/Foundation.h>
#import "NSString+Number.h"
int main() {
// 用类名调用类方法
int count = [NSString getNumberCount:@"ajdsaf8sa7fag6a6s7f68asd"];
// 用对象调用对象方法
int count1 = [@"121dsjfa8s7ad6f7as7" numberCount];
NSLog(@"%i",count1);// 访问
return 0;
}
作者:
魔法少年十三
时间:
2014-10-12 04:49
有点令人疑惑的是xcode6好像没有新建分类文件的选项了。但是手动写的话还是可以的
作者:
小叶子
时间:
2014-10-12 08:32
不错不错~~~~~
作者:
keep_flying
时间:
2014-10-12 11:15
学习了,不错的分享哦:)
作者:
米匠
时间:
2014-10-12 21:54
好东西一定要顶。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2