A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Jack-xie 中级黑马   /  2014-10-11 21:24  /  1010 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

分类的作用:在不改变原来类内容的基础上,可以为类增加一些方法,可以添加对象方法和类方法,利于团队开发

使用注意:
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;
}

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

4 个回复

倒序浏览
魔法少年十三 来自手机 中级黑马 2014-10-12 04:49:47
沙发
有点令人疑惑的是xcode6好像没有新建分类文件的选项了。但是手动写的话还是可以的
回复 使用道具 举报
不错不错~~~~~
回复 使用道具 举报
学习了,不错的分享哦:)
回复 使用道具 举报
好东西一定要顶。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马