Object-C中的Category

2014-11-24 09:39:07 · 作者: · 浏览: 0

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

@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

@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
#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
#import "NSString+ReverseString.h"

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

@autoreleasepool {

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

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