一、Category类别

  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;

    @implementation Foo

    - (void) test

    {

      [self test2];

    }

    - (void) test2

    {

      NSLog(@"test2 is calling");

    }

    @end;

    这个例子用Category实现了函数的私有化。

 

四、字符串的翻转方法函数扩展

  建立一个Category的项目后,

  NSString+ReverseString.h代码:

View Code
#import <Foundation/Foundation.h>

@interface NSString (ReverseString)

- (id) reverseString;

@end

  NSString+ReverseString.m

View Code
#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

View Code
#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;
}

 

 

posted on 2012-12-26 01:17  千里烟波226  阅读(1732)  评论(0编辑  收藏  举报