• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Objective-C学习之旅(九)----Category语法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap