———Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ———
在说分类之前,先说一下分类在xcode中的位置,因为本人用的是xcode6.0.1版本。进行到分类时,在xcode中找category费了好大的劲儿,几乎是把所有文件都打开找了一遍,最后才找到,所以在此先讲一下category在xcode6.0.1中的位置。
1.首先在项目中右击选择new file这一项
2,然后进入如图所示的页面;
3.然后进入下图中的页面中,重点就是这一步,我之前打开了无数遍,可就是没有点下拉框,因此没有看见category
在class选项中,把鼠标挪上去就会有一个提示:要给哪一个类增加分类。选择好之后next,再creat就OK了。
言归正传:
OC分类语法 Category
分类可以给某一个类扩充一些方法(不修改原来的代码)
分类的好处:
1.一个庞大的类可以分模块开发
2.一个庞大的类可以由多个人来编写,更有利于团队合作。
如果一个类的方法很多,那么就可以按照功能来分类,把不同的功能方法写在不同的分类中。而且一个类的方法可以由多个人来共同实现,每个人写的方法都是一个分类,最后汇总起来就是一个完整的类了。所以说分类的名称可以是人名,也可以是功能的名称,名称最好起的有意义一点。
分类的格式如下:
//声明
@interface 类名(分类名称)
@end
如给Person这个类创建一个分类zy,那么他的声明就如下:
#import "Person.h" // 因为下面的声明中用到了Person类
@interface Person (zy)
@end
实现也是同理
// 实现
@implementation 类名(分类名称)// 头文件为#import " Person+zy.h"
@end
分类的作用:在不改变原来类内容的基础上,可以为类增加一些方法
使用注意:
1.分类只能增加方法,不能增加成员变量
2.分类方法实现中可以访问原来类中声明的成员变量
3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用
4.方法调用优先级:分类(最后参与编译的分类)->原来类->父类
如果多个分类中有同样的方法,那么调用这个方法的时候,要看哪一个分类是最后编译的,调用的就是最后参与编译的分类,这个可以再项目中看到
如何看文件编译的先后顺序:
如图,一共有两个分类,如果这两个分类中都有一个test对象方法,那么在Person对象调用test这个方法时,就是调用的zy这个类的test方法,因为他是最后编译的。
分类的应用:
在开发过程中一般都是给系统自带的类添加一些分类。
如:给NSString类增加一个类方法:计算某个字符串中阿拉伯数字的个数
+ (int)numberCountOfString:(NSString *)str
{
//定义变量计算数字的个数
int count = 0;
for (int i = 0; i<str.length; i++)
{
unichar c = [str characterAtIndex:i]; // characterAtIndex 这个方法相当于遍历字符串,返回字符
if (c>='0'&& c<='9')
{
count++;
}
}
return count;
// return [str numberCount] // 如果同时有类方法和对象方法,那么就可以直接调用对象方法,不用再把算法写一遍了
}
给NSString类增加一个对象方法:计算当前字符串中阿拉伯数字的个数
- (int)numberCount
{
int count = 0;
for (int i = 0; i<self.length; i++)
{
unichar c = [self characterAtIndex:i]; // 当前对象调用<span style="font-family: Arial, Helvetica, sans-serif;">characterAtIndex方法</span>
if (c>='0'&& c<='9')
{
count++;
}
}
return count;
}
类库:很多类的集合。