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