分类:category

来源:互联网 发布:计算机冗余控制软件 编辑:程序博客网 时间:2024/05/16 13:49

分类category :也叫类别,可以动态的为某个类增加一些方法,拓展这个类,能够方便团队开发,分类可以在你即使不知道一个类的源码的情况下,也可以向这个类添加扩展的方法,但是分类无法向类中添加新的成员变量,分类没有位置容纳成员变量(可以使用字典对象解决);

1:分类声明

//声明@interface 类名<分类名称>@end//实现@implemention 类名(分类名称)@end

2:分类创建  NewFile-Objective-C File - Category


在Person中添加扩展方法run ,扩展类名称为:action 

Person+action.h

#import "Person.h"@interface Person (action)-(void)run;@end
Person+action.m

#import "Person+action.h"@implementation Person (action)-(void)run{    NSLog(@"某人跑了起来。。。");}@end
main.m

#import <Foundation/Foundation.h>#import "Person+action.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        Person *p =[[Person alloc]init];        [p run];        }    return 0;}
注意:如果Category增加的方法如果与类的方法同名,会覆盖原类中的方法,因为Category具有更高的优先级;
例如Person.m 中有run方法:

#import "Person.h"@implementation Person-(void)run{    NSLog(@"跑跑");}@end
代码执行情况为:

3:也可以向系统固有的数据类型进行动态添加方法:比如向NSString的方法中添加计阿拉伯数字个数的方法;

Nsstring+Number.m

#import "NSString+Number.h"@implementation NSString (Number)-(int)numberOfWords{    int count =0;    /*     不建议这样写,i=self.length 每次都会调用get方法,增加系统开销,所以将其提取出来     for(int i=0;i<self.length;i++)     */    long len = self.length;    for(int i=0;i<len;i++)    {        //获取i位置对应的字符        char c = [self characterAtIndex:i];        if(c>='0' && c<='9')        {            count ++;        }    }    return count;}@end
main.m

#import <Foundation/Foundation.h>#import "Person+action.h"#import "NSString+Number.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        Person *p =[[Person alloc]init];        [p run];        NSString *str =@"1234546dksjfkdfj";        int num = [str numberOfWords];        NSLog(@"字符串中数字的个数为%d",num);    }    return 0;}
代码运行情况:



注意:Category 中的方法必须声明并且实现,如果不声明,编译器将会报错(和类扩展不同)
比如在Nsstring+Number.h 中没有声明numberOfwords方法,编译器会报如下错误:






0 0
原创粉丝点击