分类的使用和非正式协议 - OC

分类(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>

你可能感兴趣的:(分类的使用和非正式协议 - OC)