Object-C中的Category

来源:岁月联盟 编辑:exp 时间:2012-10-26

 Object-C中的Category其实是一种对于类的方法的扩充,有些类似于类的继承,但是和继承还是不一样的。下面我

们通过一个例子还说明一个OC中的Category的不同。

首先是.h文件,一般的命名规范为这样NSString+ReverseString.h,具体的代码如下


[cpp] 
//  
//  NSString+ReverseString.h  
//  Catagory  
//  
//  Created by bird on 12-10-25.  
//  Copyright (c) 2012年 bird. All rights reserved.  
//  
 
#import <Foundation/Foundation.h>  
 
@interface NSString (ReverseString) 
 
- (id) reverseString; 
 
@end 

//
//  NSString+ReverseString.h
//  Catagory
//
//  Created by bird on 12-10-25.
//  Copyright (c) 2012年 bird. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSString (ReverseString)

- (id) reverseString;

@end

然后是他的实现文件,具体如下


[cpp] view plaincopyprint?
//  
//  NSString+ReverseString.m  
//  Catagory  
//  
//  Created by bird on 12-10-25.  
//  Copyright (c) 2012年 bird. All rights reserved.  
//  
 
#import "NSString+ReverseString.h"  
 
@implementation NSString (ReverseString) 
 
- (id) reverseString 

    //这里的self表示字符串本身,所以length表示字符串本身的长度  
    NSUInteger len = [self length]; 
    NSMutableString *retStr  = [NSMutableString stringWithCapacity:len]; 
    while(len>0){ 
        //从后取一个字符  
        unichar c = [self characterAtIndex:--len]; 
        NSLog(@"c is %C",c); 
        NSString *s = [NSString stringWithFormat:@"%C",c]; 
        [retStr appendString:s]; 
    } 
    return retStr; 

 
@end 

//
//  NSString+ReverseString.m
//  Catagory
//
//  Created by bird on 12-10-25.
//  Copyright (c) 2012年 bird. All rights reserved.
//

#import "NSString+ReverseString.h"

@implementation NSString (ReverseString)

- (id) reverseString
{
    //这里的self表示字符串本身,所以length表示字符串本身的长度
    NSUInteger len = [self length];
    NSMutableString *retStr  = [NSMutableString stringWithCapacity:len];
    while(len>0){
        //从后取一个字符
        unichar c = [self characterAtIndex:--len];
        NSLog(@"c is %C",c);
        NSString *s = [NSString stringWithFormat:@"%C",c];
        [retStr appendString:s];
    }
    return retStr;
}

@end

可以看到很多类的使用,然后是主文件来调用一下


[cpp] 
//  
//  main.m  
//  Catagory  
//  
//  Created by bird on 12-10-25.  
//  Copyright (c) 2012年 bird. All rights reserved.  
//  
 
#import <Foundation/Foundation.h>  
#import "NSString+ReverseString.h"  
 
int main(int argc, const char * argv[]) 

 
    @autoreleasepool { 
             
        NSString *string = @"测试样例hello"; 
        NSString *retString = [string reverseString]; 
        NSLog(@"%@",retString); 
    } 
    return 0; 

// www.2cto.com
//  main.m
//  Catagory
//
//  Created by bird on 12-10-25.
//  Copyright (c) 2012年 bird. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "NSString+ReverseString.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
           
        NSString *string = @"测试样例hello";
        NSString *retString = [string reverseString];
        NSLog(@"%@",retString);
    }
    return 0;
}

可以看出,使用Category扩展的方法有点类似于这个类本来就存在的方法,但是实际上不是这样的。