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擴展的方法有點類似於這個類本來就存在的方法,但是實際上不是這樣的。