OC学习笔记之OC分类

本文详细介绍了如何使用 Swift 中的分类 (Category) 功能为内置类 NSString 添加方法,包括分类的语法、使用举例及注意事项。通过实例展示了如何计算字符串中的单词个数,并提供了测试截图作为验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一、什么是分类
        分类 category 是OC中的语法,它可以在不修改OC类的原代码的情况下为这个类扩充方法。什么意思呢?也就是不用修改原类文件哪怕一个字符,就可以在这个类的分类中为原类添加想要的方法。通常情况下,分类是用在对系统自带类的方法扩充中,因为我们不知道苹果官方类的原代码,这时系统自带的类有时并不能完全满足用户需求,就可以用分类来为系统类添加方法,以满足需求。 另一个优点就是当开发一个类,而这个类十分庞大时,可以使用分类,让多个开发者共同开发这个类。

     
二、语法格式
        分类的语法格式和类很相似,分为声明部分和实现部分,只是每个分类都有自己的别名,分类别名自定义,一般以功能或作者全名

 分类的声明

@interface 原类名 (分类别名)


// 扩充的方法声明

@end

分类的实现

@implementation 原类名 (分类别名)


// 扩充的方法实现

@end

         下面是小桥为系统自带类NSString写的一个分类:

//  文件:NSString+Qiao.h
//  项目:博客笔记
//
//  作者:葬花 桥
//  日期:14-5-7
//  版权:Copyright (c) 2014年 itcast. All rights reserved.
//
#import <Foundation/Foundation.h>

@interface NSString (Qiao)

// 扩充的方法声明
@end 
//  文件:NSString+Qiao.m
//  项目:博客笔记
//  作者:葬花 桥
//  日期:14-5-7
//  版权:Copyright (c) 2014年 itcast. All rights reserved.
//

#import "NSString+Qiao.h"

@implementation NSString (Qiao)

// 扩充的方法实现

@end


三、使用举例
        小桥在这里给个使用举例,给NSString类添加一个方法,用来计算字符串中的单词个数,代码如下 :

//  文件:NSString+Qiao.h
//  项目:博客笔记
//  作者:葬花 桥
//  日期:14-5-7
//  版权:Copyright (c) 2014年 itcast. All rights reserved.
//
#import <Foundation/Foundation.h>

@interface NSString (Qiao)

// 扩充的方法声明
// 计算字符串中的单词个数
- (int)countWordsOfString;

@end

//  文件:NSString+Qiao.m
//  项目:博客笔记
//  作者:葬花 桥
//  日期:14-5-7
//  版权:Copyright (c) 2014年 itcast. All rights reserved.
#import "NSString+Qiao.h"

@implementation NSString (Qiao)

// 扩充的方法实现
// 计算字符串中的单词个数
- (int)countWordsOfString;
{
   BOOL isWord = NO;// 上一个字符是不是字母
   int count = 0;// 单词个数
   for (int i =0; i < self.length; i++)
    {
       unichar c = [selfcharacterAtIndex:i]; // 找出字符串中第 i个字符
       if ( (c >= 'A' && c <='Z')  || (c >= 'a' && c <='z') ) // 当前字符为字母
        {
           if (isWord == NO)// 如果上一个字符不是字母
            {
                count++;// 单词个数加1
            }
            isWord =YES; // 下次查找时,这次的字符是字母
           continue; // 查找下一个字符
        }
        isWord =NO; // 当前字符不是字母
    }
   return count;
}

@end

        这与使用原类一样,在使用时也要import这个类,下面是小桥测试截图:
 


四、分类的注意事项
           1> 分类只能添加方法,而不能添加成员变量,分类也可以访问原类的成员变量,要添加成员变量只能通过第二种方法---继承。
           2> 分类可以重新实现原类中的方法,但是会覆盖原类中方法,使得外部不能调用原类的方法,只能调用分类中重写的方法,MJ老师不推荐这么做。
           3>  一个原类可以有多个分类,多个分类中如果有相同的方法,那么最后参与编译的分类中的方法才能调用,其它的都被覆盖。

           4> 方法调用优先级:分类(最后编译的)---->原类----->父类 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值