黑马程序员技术交流社区
标题:
OC学习笔记之分类
[打印本页]
作者:
zhuhoulin
时间:
2015-7-23 20:41
标题:
OC学习笔记之分类
分类(Category)的作用
在不修改原有的类的基础上增加新的方法
一个庞大的类可以分模块开发
一个庞大的类可以有多个人来编写,更有利于团队合作
使用分类的目的
1. 对现有的类进行扩展。
比如可以扩展Cocoa touch框架中的类,这些新增加的类跟框架中的类没有区别。
2.作为子类的替代手段
不需要定义和使用一个子类,你可以通过类别直接向已有的类里增加方法
3.对类中的方法进行归类
利用Category把一个庞大的类划分为小块来分别进行开发,从而更好的对类中的方法进行更新和维护。
使用分类的步骤
声明分类------------>实现分类----------->使用分类
分类不能继承父类的方法
分类的声明和实现,及分类的使用
1.声明
格式:
@interface 待扩展的类名 (分类的名称)
@end
例如:
@interface Person :NSObject
@end
@interface Person (base)//给Person类增加方法
-(void)run;
-(void)eat;
@end
2.实现
格式:
@implementation 待扩展的类 (分类的名称)
@en待
实现:
@implementation Person (base)
-(void)run{
NSLog(@"人会跑");
}
-(void)eat{
NSLog(@"人会吃饭");
· }
@end
3.使用
Person *p = [Person new];
[p run];
[p eat];
分类(Category)的使用座椅事项
1.分类的使用注意事项
(1)分类只能增加方法,不能增加成员变量(声明的时候不能够声明实例变量)
如果使用@property声明的话,例如@property int sex;使用@property关键字的时候
编译会通过,但是运行的时候会出错。
(2)可以在分类中可以访问原有类的成员变量
(3)如果分类和原来的类中存在相同名称的方法的话,那么优先使用分类中的方法
注:类和分类在同一个源文件中
(4)当多个类别中存在相同的方法的时候,程序运行时最后编译的的源文件中的方法会被执行
修改编译顺序
分类(Category)的非正式协议
所谓的非正式协议就是类别,这些类别是给NSObjectl或者foundation框架中提供的
其子类增加新的方法,这些新方法所属的分类就是分正式协议。
但是一般这些非正式协议不建议给NSObject。
unichar ch = [characterAtIndex:0]//characterAtIndex方法是去当前位置的字符,返回类型是unichar类型。
分类(Category)的延展
1.延展的概念和形式
延展类别又称为扩展(延展,延展类别,扩展)-----------Extendsion是一个特例。形式体现:
@interface Myclass (){ //这种写法的了别叫做匿名类别,又叫做类扩展,所谓的扩展,其实就是为一个类别
//添加额外的原来的没有的变量、方法、或者合成属性。
float value;
}
-(void)setValue:(float)newValue;
@end
2.延展的实现
@interface Person{
}
@end
@interface Person (){
int _weight;//可以声明实例变量
}
-(void)run;//相对私有的方法,方法声明的时候在延展分类中声明,但是方法实现的时候要通过源类声明
@end
@implementation
-(void)run{
NSLog(@"人在跑");//延展分类中申明的方法只能在原来中实现。
}
@end
作者:
ylxkab
时间:
2015-7-23 21:16
写了那么多,不错
作者:
花漾
时间:
2015-7-23 22:08
也是够认真的
作者:
venn
时间:
2015-7-23 22:22
顶一个,,,,,,,提前预习了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2