分类: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;@endPerson+action.m
#import "Person+action.h"@implementation Person (action)-(void)run{ NSLog(@"某人跑了起来。。。");}@endmain.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;}@endmain.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
- Category分类
- 分类Category
- Category分类
- 分类(category)
- Category(分类)
- category 分类
- 分类:category
- 分类Category
- Objective-C分类 (category)
- OC与Category 分类
- 黑马程序员------Category:分类
- OC语言--分类(category)
- Objective-C 分类Category
- 分类(category)、协议(protocol)
- OC中的分类Category
- 038.category 分类/类别
- Category(分类)
- Category分类用法
- cvc-complex-type.2.4.a: Invalid content was found starting with element
- Lib Vote 建哪个知识库,你说了算
- 权限控制案例
- monkey自动化随机测试
- 如何招聘研发人员
- 分类:category
- getView顺序加载显示图片
- UIImageView响应点击事件
- Scheme R5RS 4.表达式
- Oracle 12c 启用VARCHAR2, NVARCHAR2, and RAW类型支持32K(4,000 to 32,767 bytes)
- java中获取控制台输入的两种方式
- Atom使用教程
- Mysql基本操作(二)
- HTTP协议之状态码详解