美文网首页
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的使用

    Objective-C 运行时-Category的使用 Category 定义 类别是Objective-C的一项...

  • Objective-C——扩展(Extension)详解

    我在上一篇博客中详细讲解了Category类别《Objective-C——类别(Category)详解》,而扩展和...

  • iOS中的Category类别

    问题: OC中类别(Category)是什么?Category类别是Objective-C语言中提供的一个灵活的类...

  • Categroy底层原理

    一、Category概念? Category是Objective-C 2.0之后添加的语言特性,分类、类别其实都是...

  • Category

    一、概述 Category是Objective-C 2.0之后添加的语言特性,Category又叫分类、类别、类目...

  • iOS 开发 category的理解

    一、概述 Category是Objective-C 2.0之后添加的语言特性,Category又叫分类、类别、类目...

  • 分类与拓展

    分类(Category) Category是Objective-C 2.0之后添加的语言特性,分类、类别其实都是指...

  • iOS-分类(Category)

    Category是Objective-C 2.0之后添加的语言特性,分类、类别其实都是指的Category。Cat...

  • Objective-C--分类和扩展(Category)

    什么是Category? category是Objective-C 2.0之后添加的语言特性,别人口中的分类、类别...

  • iOS中的category和extension

    (一)Category category是Objective-C 2.0之后添加的语言特性,别人口中的分类、类别其...

网友评论

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

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