技术的乐趣在于分享,欢迎多多交流,多多沟通。
全部博文(877)
分类: iOS平台
2015-08-24 15:41:42
1、Category能把一个类的实现分为若干不同文件中。
2、每个Cagegory是类的一部分。
3、类的不同类别可以单独编译(可以让不同开发者负责一个Category)
4、如果把一个类Category(申明和实现)放到一个.m文件中,那么该Category外界不能访问。这样实现了C++中class的private功能
5、Category实际上就是对类的扩展。
二、缺点
1、类别Category只能扩展函数,消息,不能扩展字段,变量等。Category只能加一些方法不能加一些变量和字段。
三、类别Category命名规范
1、一般Category命名规范
要扩展类名+扩展变量.[hm]
比如:NSString+ReverseString.h
NSString+ReverseString.m
UIImageView+WebCache.h
UIImageView+WebCache.m
2、NSString+Reverse.h头文件
NSString+Reverse.h
#import<Foundation/Foundation.h>
@interface NSString(reverse)
-(NSString *)reverseString
@end
3、unichar c=[self characterAtIndex:--len];
NOLog(@"c is C%",c);
注意这里的c是unichar类型,这里的c是包含2个字节的国际字符,所以用C%来表示。这是OC里面特有的东西。
4、实现函数的私有化
@interface Foo(Private)
- (void) test2;
@end;
@interface Foo() //通常的私有化是不加Private字样的
- (void) test2;
@end;
例如:
@implementation Foo
- (void) test
{
[self test2];
}
- (void) test2
{
NSLog(@"test2 is calling");
}
@end;
这个例子用Category实现了函数的私有化。
四、字符串的翻转方法函数扩展
建立一个Category的项目后,
NSString+ReverseString.h代码:
#import <Foundation/Foundation.h> @interface NSString (ReverseString) - (id) reverseString; @end
NSString+ReverseString.m
#import "NSString+ReverseString.h" @implementation NSString (ReverseString) - (id) reverseString { NSUInteger len = [self length]; // self 表示字符串本身 NSMutableString *retStr = [NSMutableString stringWithCapacity:len]; while (len > 0) { unichar c = [self characterAtIndex:--len]; // 从后取一个字符 unicode NSLog(@" c is %C", c); NSString *s = [NSString stringWithFormat: @"%C", c]; [retStr appendString:s]; } return retStr; } @end
main.m
#import <Foundation/Foundation.h> #import "NSString+ReverseString.h" int main (int argc, const char * argv[]) { @autoreleasepool { NSLog(@"Hello, World!"); NSString *string = @"中国万岁hello"; NSString *retString = [string reverseString]; NSLog(@"ret string is %@", retString); } return 0; }