黑马程序员---OC分类-category

———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;
}
类库:很多类的集合。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值