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
3)main
/**
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