OC学习笔记之分类
来源:互联网 发布:在淘宝开店怎么取消 编辑:程序博客网 时间:2024/05/22 02:08
分类(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
在不修改原有的类的基础上增加新的方法
一个庞大的类可以分模块开发
一个庞大的类可以有多个人来编写,更有利于团队合作
使用分类的目的
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
0 0
- OC学习笔记之分类
- OC学习笔记之OC分类
- oc学习笔记之协议与分类
- 黑马程序员---OC学习笔记之分类(Category)延展
- 黑马视频学习笔记-OC-分类
- OC学习笔记05--分类的使用
- OC学习Runtime之协议与分类
- OC学习笔记之OC初见面
- OC学习笔记之OC类你好
- OC学习笔记之OC内存管理
- 黑马程序员-----oc语言学习笔记之构造方法和分类
- 黑马程序员---OC学习笔记之分类(Catgory)的概念及使用
- 黑马程序员---OC学习笔记之分类(Category)非正式协议【重点】
- Objective-C学习笔记(四):OC之分类、类对象、description方法和SEL
- OC学习笔记之ARC
- OC学习笔记之block
- OC学习笔记之@synthesize
- OC学习笔记之autorelease
- Snail—UI学习之UITextField
- 入行时的面试题(大家不要笑哦)
- iOS前期OC训练OC_06数组
- 软件工程师面试题
- Android 自定义对话框
- OC学习笔记之分类
- NGUI研究——NGUI Scroll View
- matlab7安装后的常见问题
- 转 :C++输入的常见命令
- ListInsert()
- iOS前期OC训练OC_通讯录
- 2015多校联合训练赛 hdu 5305 Friends 2015 Multi-University Training Contest 2 枚举+剪枝
- 队列
- GitHub 的开源项目一二