分类的使用和非正式协议 - OC
2015-09-02 本文已影响844人
以太死多
分类(Category)的作用:
- 在不修改原有的类的基础上增加新的方法
一个庞大的类可以分模块开发
一个庞大的类可以由多个人来编写,更有利于团队合作
使用分类(Category)的目的:
-
1>对现有类进行扩展
可以扩展cocoa touch框架中的类,你在类别中增加的方法会被子类所继承,而且在运行时跟其他的方法没有区别。 -
2>作为子类的替代手段
不需要定义和使用一个子类,你可以通过类别直接向已有的类里增加方法 -
3>对类中的方法归类
利用category把一个庞大的类划分为小块来进行开发,从而更好的对类中的方法进行更新和维护。
声明和使用一个分类(Category):
- 格式:
@interface 待扩展的类名(分类的名称) //分类声明
@end
@implementation 待扩展的类名(分类的名称) //分类实现
@end
Person+base ------>分类文件的命名规范
如:
@interface Person(base) //@interface 待扩展的类名(分类的名称)
@end
分类(Category)的注意事项:
- 1>分类只能增加方法,不能增加成员变量
- 2>分类可以访问原来类中的成员变量
- 3>如果分类和原来的类出现同名方法,优先调用分类中的方法(重写原类方法)
- 4>如果有多个分类出现同名方法,则使用最后编译的分类
非正式协议:
- 所谓的正式协议就是类别,即凡是NSObject或其子类Foundation框架中的类增加的分类别,都是非正式协议。
分类延展:
- 延展又称为扩展是类的匿名类别。所谓延展,其实就是为一个类添加额外的原来没有的变量、方法或者合成属性。
@interface MyClass(){
float value; //给MyClass扩展新的变量
}
-(void)setValue:(float)newValue; //给MyClass扩展新的方法
@end
- 延展的特点:
1>可以在延展中,定义实例变量
2>不能使用 '@implementation 类名()' 实现类别的方法,而是直接在原'@implementation 类名' 中进行实现
3>作用,可以定义私有的变量和方法(把@interface Person() 放到.m文件中,实现私有)
4>