美文网首页
Objective-c category(类别)

Objective-c category(类别)

作者: dacheng | 来源:发表于2016-04-15 09:39 被阅读30次

    除了继承,我们还可以使用类别来为已有的类添加新方法,即使该类的源码是非公开的。例如你可以为Cocoa frameworks中现有的类添加方法。新添加的方法会被子类继承,运行时,类别方法和类方法没有任何区别。你同样可以在你自己类中使用类别实现如下目的:

    • 将你自己类的实现部分分散到不同的源文件中,例如你可以将一个大类的方法分组到多个类别中,并将各个类别放到不同的文件中。
    • 申明私有方法

    要类添加一个方法,你可以在接口文件中的类别名称下申明该方法,并在相同名称的实现文件中实现方法。类别名称指明这是其他类的一个扩展,而非一个新类。

    申明

    类别的申明跟类的申明非常类似-除了类别名是列在类名后面的圆括号里,并且不用指明父类。类别必须要导入要扩展类的接口文件:

    #import "SystemClass.h"
     
    @interface SystemClass (CategoryName)
    // method declarations
    @end
    

    一个约定俗成的取名方法是要扩展的类名+类别名称,这个类别可能在一个SystemClass+CategoryName.h文件中申明。

    如果你通过类别来为你自己的类添加一个私有方法,你可以把申明放在实现文件的 @implementation 模块之前:

    #import "MyClass.h"
     
    @interface MyClass (PrivateMethods)
    // method declarations
    @end
     
    @implementation MyClass
    // method definitions
    @end
    

    实现

    如果你要通过类别来申明一个你自己类的私有方法,你可以将实现放在@implementation模块内。如果你通过类别来扩展一个你不知源代码的类,或者实现你自己的类,你可以将实现在放在一个名称为<ClassName>+CategoryName.m的文件中。这个实现导出他自己的接口。因此一个类别的实现应该是这样的:

    #import "SystemClass+CategoryName.h"
     
    @implementation SystemClass ( CategoryName )
    // method definitions
    @end
    

    相关文章

      网友评论

          本文标题:Objective-c category(类别)

          本文链接:https://www.haomeiwen.com/subject/qdpglttx.html