ios学习路线—Objective-C(Category)

Category模式用于向已经存在的类添加方法从而达到扩展已有类的目的,在很多情形下Category也是比创建子类更优的选择。新添加的方法同样也会被被扩展的类的所有子类自动继承。当知道已有类中某个方法有BUG,但是这个类是以库的形式存在的,我们无法直接修改源代码的时候,Category也可以用于替代这个已有类中某个方法的实体,从而达到修复BUG的目的。然而却没有什么便捷的途径可以去调用已有类中原有的那个被替换掉方法实体了。需要注意的是,当准备有Category来替换某一个方法的时候,一定要保证实现原来方法的所有功能,否则这种替代就是没有意义而且会引起新的BUG。和子类不同的是,Category不能用于向被扩展类添加实例变量。Category通常作为一种组织框架代码的工具来使用。

Category的用途
1.在不创建继承类的情况下实现对已有类的扩展。
2. 简化类的开发工作(当一个类需要多个程序员协同开发的时候,Category可以将同一个类根据用途分别放在不同的源文件中,从而便于程序员独立开发相应的方法集合)。
3. 将常用的相关的方法分组。
4. 在没有源代码的情况下可以用来修复BUG。

Category的用法
在Obj-C中,声明某一个已有类的Category扩展的方法如下:

@interface ClassName (CategoryName) 

    -methodName1  
    -methodName2 

@end  

上面的声明通常是在.h文件中,然后我们在.m文件中实现这些方法:

@implementation ClassName (CategoryName) 

    -methodName1  
    -methodName2  

@end  

声明Category

#import <Foundation/Foundation.h>  
@interface NSString (ReverseNSString) 

+ (NSString*) reverseString:(NSString*)strSrc;  

@end  

实现Category

#import"NSString+ReverseNSString.h"  
@implementationNSString (ReverseNSString)  
+ (NSString*)reverseString:(NSString*)strSrc;  
{  
    NSMutableString *reversedString =[[NSMutableString alloc]init];  
    NSInteger charIndex = [strSrc length];  
    while (charIndex > 0) {  
        charIndex--;  
        NSRange subStrRange =NSMakeRange(charIndex, 1);  
        [reversedString appendString:[strSrcsubstringWithRange:subStrRange]];  
    }  
    return reversedString;  
}  
@end  

代码组织
Category用于大型类有效分解。通常一个大型类的方法可以根据某种逻辑或是相关性分解为不同的组,一个类的代码量越大,将这个类分解到不同的文件中就显得越有用,每个文件中分别是这个类的某些相关方法的集合。

当有多个开发者共同完成一个项目时,每个人所承担的是单独的cagegory的开发和维护。这样就版本控制就更加简单了,因为开发人员之间的工作冲突更少了。

Category VS 添加子类
1.如果需哟啊添加一个新的变量,则需要添加子类。
2.如果只是添加一个新的方法,则需要Category

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值