黑马程序员_OC中的分类(Category)的使用
2014-04-13 22:41
459 查看
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
分类(Category)是OC中特有的语法,在OC中,有时候想在不更改类文件的基础上给一些类扩充一些方法,这时候就用到了分类(Category)。
1.Person.h
如果有一天你想给你的Person类增加一个学习方法,而且不修改原文件,不创建子类,那么,你可以给你的Person写一个分类来(Category)实现上述要求。分类文件名一般为:类名+分类名称。
1.Person+SY.h
1.分类只能增加方法,不能增加成员变量;
2.分类方法实现中可以访问原来类中声明的成员变量;
3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用;
4.方法调用的优先级:分类(最后参与编译的分类优先) --> 原来类 --> 父类;
1.给NSString增加一个类方法:计算某个字符串中阿拉伯数字的个数;
2.给NSString增加一个对象方法:计算当前字符串中阿拉伯数字的个数;
1.NSString+Number.h
2.NSString+Number.m
main.m
count1=4, count2=4
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
分类(Category)是OC中特有的语法,在OC中,有时候想在不更改类文件的基础上给一些类扩充一些方法,这时候就用到了分类(Category)。
一、给自己已经写好的类增加方法:
比如你已经写好了一个Person类:1.Person.h
#import <Foundation/Foundation.h> @interface Person : NSObject { int _age; } @property int age; - (void)eat; @end2.Person.m
#import "Person.h" @implementation Person - (void)eat { NSLog(@"Person-eat"); } @end
如果有一天你想给你的Person类增加一个学习方法,而且不修改原文件,不创建子类,那么,你可以给你的Person写一个分类来(Category)实现上述要求。分类文件名一般为:类名+分类名称。
1.Person+SY.h
#import "Person.h" @interface Person (SY) - (void)study; @end2.Person+SY.m
#import "Person+SY.h" @implementation Person (SY) - (void)study { NSLog(@"学习-----%d", _age); } @end分类的使用注意:
1.分类只能增加方法,不能增加成员变量;
2.分类方法实现中可以访问原来类中声明的成员变量;
3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用;
4.方法调用的优先级:分类(最后参与编译的分类优先) --> 原来类 --> 父类;
二、给系统自带类增加方法来方便我们使用:
例如:1.给NSString增加一个类方法:计算某个字符串中阿拉伯数字的个数;
2.给NSString增加一个对象方法:计算当前字符串中阿拉伯数字的个数;
1.NSString+Number.h
#import <Foundation/Foundation.h> @interface NSString (Number) + (int)numberCountOfString:(NSString *)str; - (int)numberCount; @end
2.NSString+Number.m
#import "NSString+Number.h" @implementation NSString (Number) - (int)numberCount { int count = 0; for (int i = 0; i<self.length; i++) { // 取出i这个位置对应的字符 unichar c = [self characterAtIndex:i]; // 如果这个字符是阿拉伯数字 if ( c>='0' && c<='9' ) { count++; } } return count; } + (int)numberCountOfString:(NSString *)str { return [str numberCount]; }在main函数中调用分类方法:
main.m
#import <Foundation/Foundation.h> #import "NSString+Number.h" int main() { int count1 = [NSString numberCountOfString:@"45hg1gh1th"]; int count2 = [@"45hg1gh1th" numberCount]; NSLog(@"count1=%d, count2=%d", count1, count2); return 0; }运行结果为:
count1=4, count2=4
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
相关文章推荐
- 黑马程序员-基础测试题
- 黑马程序员—Java集合框架(Collection、ArrayList)
- 黑马程序员-IT学生解惑真经-想做程序员或者正在迟疑的同学可以看一下,很有帮助的一篇文章
- 黑马程序员-Java基础知识总结(超级经典)
- 包容的力量
- 面试经典(11)--二叉树层次遍历
- 对C# 程序员来说现在是到目前为止最好的时代
- 读书笔记2014第4本:程序员修炼之道-从小工到专家(第二章)
- 2010阿里巴巴实习生面试经历
- 黑马程序员_OC构造方法
- 在Pycharm里创建虚拟开发环境
- 黑马程序员—Java基础加强学习笔记之枚举&反射
- 黑马程序员_复习异常:理解自定义异常
- 面试题(一)
- 【转】再次写给我们这些浮躁的程序员
- 黑马程序员_java基础之多线程
- 黑马程序员—Java API(基本数据类型包装类之Integer)
- 黑马程序员_java基础之异常处理
- SSH面试题总结
- 黑马程序员_OC继承与组合