C17_OC07-Category分类:增强模式



category:分类、类别、类目。

1.基本使用

1)普通类:

/*
	文件:Jackman.h
	项目:ocstudy

	作者:vigiles
	日期:14-5-4
	  Copyright (c) 2014年 itcast. All rights reserved.
*/

/**
 Category意为类别、分类,可理解为增强
 原类(普通人):休.杰克曼(Hugh Jackman)
 **/
#import <Foundation/Foundation.h>

@interface Jackman : NSObject   //普通人,由NSObject所生
    - (void)run;                //普通人技能
@end
---------------------------------------------------------------------------------------------
/*
	文件:Jack.m
	项目:ocstudy

	作者:vigiles
	日期:14-5-4
	  Copyright (c) 2014年 itcast. All rights reserved.
*/

#import "Jackman.h"

@implementation Jackman
    - (id)init{
        if (self = [super init]) {
            NSLog(@"肉身创建");
        }
        return self;
    }

    - (void)run{
        NSLog(@"像普通人一样跑");
    }
@end

2)增强类:

/*
 文件:Jackman+Wolverine.h
 项目:ocstudy
 
 作者:vigiles
 日期:14-5-4
 Copyright (c) 2014年 itcast. All rights reserved.
 */

/**
 Category意为类别、分类,可理解为增强
 增强类(变种人):金刚狼(Wolverine)== 休杰克曼+铁爪+自我修复
 
 注意:
    1.只能增加方法-增强功能
    2.可以重写方法-也能增强
        重写后,覆盖原类的同名方法
    3.不能增加成员属性
        可以调用原类的属性
    4.方法调用优先级
        首先在增强类中找,如果没有就在原类找,如果还没有就在原类的父类找
 **/

#import "Jackman.h"

@interface Jackman (Wolverine)  //变种人格式:普通人名称(变种人名称-在项目中一般是模块名称)
    //这里一般是变种人特有的牛逼技能
    - (void) claws;
    - (void) selfRepair;
@end
-----------------------------------------------------------------------------------------------------------------
/*
 文件:Jackman+Wolverine.m
 项目:ocstudy
 
 作者:vigiles
 日期:14-5-4
 Copyright (c) 2014年 itcast. All rights reserved.
 */

#import "Jackman+Wolverine.h"

@implementation Jackman (Wolverine)
    - (id)init{
        if (self = [super init]) {
            NSLog(@"注入爱德曼金属");
        }
        return self;
    }

    - (void) claws{
        NSLog(@"利爪~·~~··~");
    }

    - (void) selfRepair{
        NSLog(@"自我修复...");
    }
@end

3main

/**
 Category意为类别、分类,可理解为增强
 原类:休.杰克曼(Hugh Jackman)
 增强类:金刚狼(Wolverine)== 休杰克曼+铁爪+自我修复
注意:
	OC中普通人的后代还是普通人,没有变种人的技能。所以“利爪”、“自我修复”这种能力是继承不来的
 **/
#import <Foundation/Foundation.h>
#import "Jackman.h"             //这个是必须有的
#import "Jackman+Wolverine.h"   //这个是必杀技必须有的

int main()
{
    Jackman * jack = [[Jackman alloc] init];    //这里执行的是金刚狼的init
    [jack run];         //本能
    [jack claws];       //增强版:必杀技
    [jack selfRepair];  //增强版:牛逼技能
    
    return 0;
}


2.NSString增强

对系统类的一些列增强会造就类库。

1)增加统计字符功能

#import <Foundation/Foundation.h>

@interface NSString (NumberCount)
    + (int)countNumberWithArg:(NSString *)str;
    - (int)countNumber;
    - (int)countChinese;
@end

@implementation NSString (NumberCount)
    //我想这样使用 [@"动态字符串" countNumber]; 这个字符串是动态的,所以这里是动态方法
    - (int)countNumber{
        //统计个数
        int count = 0;
        //遍历每个字符                      //如果合格,统计
        for (int i=0; i<self.length; i++) if (([self characterAtIndex:i] >= '0') && ([self characterAtIndex:i] <= '9')) count++;
        
        //返回个数
        return count;
    }

    //我们这样使用 [NSString countNumberWithArg:@"字符串"],这个字符串可能是已有的对象也可能是动态的。这里作为一个静态方法
    + (int)countNumberWithArg:(NSString *)str{
        return [str countNumber];
    }

    - (int)countChinese{
        int count = 0;
        
        //ASCII码保存了全部的西方字符。汉字等非西方字符就超出了ASCII范围。这里的限制是字串中只能有西方字符和汉字
        for (int i=0; i<self.length; i++) if ([self characterAtIndex:i] >= 255) count++;
        
        return count;
    }
@end

2)测试

int main()
{
    NSString * str = @"我是1987年生的";
    int count = [NSString countNumberWithArg:str];
    NSLog(@"数字个数:%d", count);
    
    str = @"我是1987年3月生的";
    count = [str countNumber];
    NSLog(@"数字个数:%d", count);
    
    count = [@"我是1987年3月22日生的" countNumber];
    NSLog(@"数字个数:%d", count);
    
    NSLog(@"汉字:%d", [@"_'零一二\\][三dd四%,五323六七八九鼜" countChinese]);
    
    return 0;
}

- end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值