Object-C中的Category

版权所有,禁止匿名转载;禁止商业使用。

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

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

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


//  
//  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.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


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


//  
//  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扩展的方法有点类似于这个类本来就存在的方法,但是实际上不是这样的。


0 0