——黑马程序员——OC中的分类(Category)总结
来源:互联网 发布:苹果电脑设计绘图软件 编辑:程序博客网 时间:2024/06/07 09:33
-----------android培训、java培训、java学习型技术博客、期待与您交流!-----------
OC中的分类(Category)
一、Category概念
Category,也称类别,类目,分类
是OC中特有的方法,其他语言中没有
二、Category作用
1、在不修改原有类的基础上给类增加新的方法
2、可以将一个庞大的类分成模块开发有多个人来编写
三、使用Category目的
1、对现有类进行扩展
2、作为子类的替代手段
不需要定义和使用一个子类,可以通过类别直接向自己的类里增加方法
3、对类中的方法归类
把一个庞大的类划分成小块
四、使用Category的步骤
先声明分类——实现分类——使用分类
注意:
1、分类的命名规则:类名+扩展方法,如“ NSString+countNum ”
2、类别的接口声明与类的定义十分相似,但分类不能继承父类,只需要带有一个括号,表明该分类的主要用途
五、分类的使用
1、声明类别
声明一个类:
@interface Person: NSobjet
@end
声明类别格式:@interface 待扩展的类名(分类的名称)
@end
例如:声明一个类别
@interface Person (base)
-(void)eat;
-(void)run;
@end
2、实现类别
格式:
@implementation 待扩展的类名(类别的名称)
-(void)eat;
-(void)run;
@end
例如:
@implementation Person (base)
-(void)eat{
NSLog(@"人在吃");
}
-(void)run{
NSLog(@"人在跑");
}
@end
3、类别的使用
和使用类中原有的对象方法一样
#import <Foundation/Foundation.h>@interface Person: NSObject@end//声明一个类别@interface Person (base)-(void)eat;-(void)run;@end@implementation Person@end//实现一个类别@implementation Person (base)-(void)eat{NSLog(@"人在吃东西");}-(void)run{NSLog(@"人在跑");}@endint main (int argc, const char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //类别测试代码 Person *p = [Person new]; //p调用类别 [p eat]; [p run]; [pool drain]; return 0;}
可以在项目文件中以类别的方式新建文件
六、类别的使用注意事项
1、在类别中不能声明实例变量,不能使用@property
2、类别中可以访问原来类中的实例变量
3、在类别中存在和类相同的方法名时 ,优先访问的而是类别中的方法,原类中的同名方法被忽略
4、在多个类别中有同名方法时,执行的是最后编译的类别中的同名方法
七、非正式协议
#import <Foundation/Foundation.h>@interface Person: NSObject@end@implementation Person@end//类别声明@interface NSObject(run)-(void)run;@end//类别实现@implementation NSObject(run)-(void)run{NSLog(@"正在奔跑");}-(void)eat{NSLog(@"正在吃饭饭");}@endint main (int argc, const char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //在此处输入Objective-C代码 Person *p = [Person new]; [p run]; [p eat]; [pool drain]; return 0;}
八、类别(Category)的延展
延展类别又称为扩展(Extendsion)、匿名类别,是类别的一个特例,
延展的名称为空,并且新添加的方法一定要实现
特点:
1、为类添加额外的原来没有的变量
2、为类添加额外的原来没有的方法
3、延展不能在@implementation 类名 () 。。。@end中实现,在当前类中实现
4、一般将类别的延展放在 . m 文件中,可以定义相对私有的方法,可以通过self调用,也可以将它放在单独的 . h 文件中,在别的文件中引入此头文件就可以使用该延展中的方法
格式:
@interface MyClass ( ){ //类扩展
...............................
}
扩展的实现是在当前类中实现,
九、类别和扩展的区别
1、类别中只能增加方法
2、类扩展中不但可以增加方法,还可以增加实例变量,该变量是私有的,子类不能继承也不能访问
3、类扩展是在编译阶段被添加到类中,而类别是在运行时添加到类中
4、类扩展 中声明的方法必须在相对应的类的实现部分来实现
5、在. m 文件中的类扩展方法为私有的,在 . h文件中的类扩展为公有的,类扩展是在 . m 文件中声明私有方法的最好方式
- ——黑马程序员——OC中的分类(Category)总结
- 黑马程序员——OC中的分类
- 黑马程序员——OC基础---分类(Category)、非正式协议及分类延展
- 黑马程序员——OC学习之分类category的使用
- 黑马程序员---OC分类-category
- 黑马程序员——OC学习——Category
- 黑马程序员——OC—构造方法和Category
- 黑马程序员13——OC语言之Category
- 黑马程序员——OC的Category和Protocol
- 黑马程序员—— OC加强---ARC+Category+Block
- 黑马程序员——OC之Category、Block
- 黑马程序员——OC基础学习(五)---分类(Category),代码块Block和protocol代理设计模式
- 黑马程序员——Category分类的使用方法
- 黑马程序员_OC中的分类(category)
- 【黑马程序员】OC-分类(Category)及延展(Extendsion)
- [黑马程序员][OC]分类(Category)的使用
- 黑马程序员——OC基础---核心语法(id,构造方法,Category,description,SEL)
- 黑马程序员——OC总结
- 点滴记录——Ubuntu 14.04中gedit打开文件出现中文乱码问题
- 三种方法实现:三人表决器-20151104
- MapKit大头针的基本使用
- Ubuntu 12.04编译mt6582错误 - Tracy Mcgrady的专栏 - 博客频道 - CSDN.NET awk: line 4: function strtonum never def
- <React: Up and Running>阅读笔记 — The life of a component & Excel: a fancy table component
- ——黑马程序员——OC中的分类(Category)总结
- hdu 5504 5505
- UML——组件图与部署图
- 【C】【笔记】高质量C++编程指南
- Ubuntu中编译Android JellyBean 4.2.1源码出现Switch.pm出错信息的解决方法
- hdu5514Frogs 容斥
- ionic/angular中module探秘
- 深入理解Java内存模型(一)——基础
- ListView的属性及方法详解