OC基础-Category的用法

一、Category概述

用于对已有类新增额外的自定义的方法。

在Objective-C中,给一个类扩展一个其它方法,有两种实现方式:类别和继承。

以下情况必须使用继承。

1.新扩展的方法与原方法同名,但是还需要使用父类的实现。因为使用类别,会覆盖原类的实现,无法访问到原来的方法。

2.扩展类的属性,这个类别无法做到。

继承使用情况:

//  ViewControllerEx.h
@interface ViewControllerEx : UIViewController
//自己需要添加的方法
@end
// ViewControllerEx.m
@implementation ViewControllerEx
// 方法的实现
@end

Category是Objective-C语言的一个特性,可以在不改变类名和原来类的实现的前提下,实现对类的方法扩展。

以下情况必须使用Category:

1.针对系统提供的一些类,例如:NSString,NSArray,NSNumber等类,系统本身不提倡使用继承去扩展方法,因为这些类内部实现对继承有所限制,所以最后使用类别来进行方法扩展。

2.类别支持开发人员针对自己构建的类,把相关的方法分组到多个单独的文件中,对于大型而复杂的类,这有助于提高可维护性,并简化单个源文件的管理。

Category使用情况:


// 这里有一个约定俗成的规定,类别文件命名时,是原类名+扩展标识名<span style="background-color: rgb(255, 255, 255);">
/</span>/  NSString+ex.h
@interface NSString (ex)
// 扩展的方法
@end
//  NSString+ex.m
@implementation NSString (ex)
// 方法的实现
@end

二、Category的使用实例

下面以NSString类为例,新增自定义的翻转字符串的方法。

ReverseString.h

#import <Foundation/Foundation.h>

//对已有类NSString使用Category新增额外自定义的方法
@interface NSString(ReverseString)

-(id)reverseString;

@end

ReverseString.m

#import "ReverseString.h"

@implementation NSString(ReverseString)

-(id)reverseString{
    NSUInteger len = [self length];
    /*
     1.使用字符串对象调用方法.self指字符串本身
     2.NSUInteger是无符号数字,即没有负数
    */
    
    NSMutableString *revStr = [NSMutableString stringWithCapacity:len];
    
    
    while(len >0){
        unichar c = [self characterAtIndex:--len];
        
        NSLog(@"c is %C", c);
        
        NSString *newC =[NSString stringWithFormat:@"%C",c];
        [revStr appendString:newC];
    }
    return revStr;
}
@end

Main.m

#import <Foundation/Foundation.h>
#import "ReverseString.h"
#import "Foo.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str = @"中国你好,hello, china";
        NSString *newStr = [str reverseString];
        NSLog(@"%@", newStr);
    }
    return 0;
}


@诗未冷学习博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值