Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2658489
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5921
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-05 12:25
个人简介

技术的乐趣在于分享,欢迎多多交流,多多沟通。

文章分类

全部博文(877)

文章存档

2021年(2)

2016年(20)

2015年(471)

2014年(358)

2013年(26)

分类: iOS平台

2015-08-24 15:41:42

一、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;

    @interface Foo()    //通常的私有化是不加Private字样的

    - (void) test2;

    @end;
例如:

#import "ViewController.h"

@interface ViewController ()    //利用category来实现函数私有化
@property(nonatomic,strong)UITableView *myTableView;
@end

@implementation ViewController

    @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;
}
复制代码

 

阅读(759) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~