Category 分类、类别 总结 - iOS

分类作用

分类:可以给某一个类扩充一些方法(不修改原来类的代码)

格式

// 声明
@interface Person (分类名称)

@end

// 实现
@implementation Person (分类名称)

@end

好处

  • 一个庞大的类可以分模块开发
  • 一个庞大的类可以由多个人来编写,更有利于团队合作

给系统自带的类添加分类

  • 给 NSString 添加一个类方法,计算某个字符串中阿拉伯数字的个数
  • 给 NSString 添加一个对象方法,计算当前字符串中的阿拉伯数字的个数
#import <Foundation/Foundation.h>

@interface NSString (YZ)
// 增加一个类方法计算某个字符串内部英文字母的个数
+ (int)zimuCountOfStr:(NSString *)str;

// 增加一个对象方法计算当前字符串内部英文字母的个数
- (int)zimuCount;

// 增加一个类方法比较两个字符串的长度,返回长度差
+ (int)compareLengthBetweenStr1:(NSString *)str1 andStr2:(NSString *)str2;

// 增加一个对象方法和其他字符串比较长度,返回长度差
- (int)compareLengthWithOther:(NSString *)other;
@end

#import "NSString+YZ.h"

@implementation NSString (YZ)
// 增加一个类方法计算某个字符串内部英文字母的个数
+ (int)zimuCountOfStr:(NSString *)str
{
    return [str zimuCount];
}

// 增加一个对象方法计算当前字符串内部英文字母的个数
- (int)zimuCount
{
    // 1.定义变量记录字母的个数
    int count = 0;

    for (int i = 0; i<self.length; i++)
    {
        // 2.取出每一个字符
        unichar c = [self characterAtIndex:i];

        // 3.如果字符是英文字母
        if ( (c>='a' && c<='z') || (c>='A' && c<='Z') )
        {
            count++;
        }
    }
    return count;
}

// 增加一个类方法比较两个字符串的长度,返回长度差
+ (int)compareLengthBetweenStr1:(NSString *)str1 andStr2:(NSString *)str2
{
    return [str1 compareLengthWithOther:str2];
}

// 增加一个对象方法和其他字符串比较长度,返回长度差
- (int)compareLengthWithOther:(NSString *)other
{
    // self.length返回的是NSUInterger类型,转成int就不会有警告
    return (int)(self.length - other.length);
}
@end

注意事项

  • Category 可以访问原始类的实例变量,但不能添加变量,只能添加方法,如果想添加变量,可以考虑通过继承和创建子类
  • Category 可以实现原始类的方法,但不推荐这么做,因为它是直接替换掉原来的方法,这么做的后果是再也不能访问原来的方法
  • 多个 Category 中如果实现了相同的方法,只有最后一个参与编译的才会有效
  • 方法调用的优先级:分类(最后参与编译的分类优先) –> 原来类 –> 父类

新博客文章地址:Category 分类、类别 总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值