iOS翻译iOS Developer程序员

翻译:类别(Category)

2016-06-12  本文已影响173人  栗子烤肉

使用类别不通过子类的方法,为已经存在的类定义额外的方法,即使这个类的源代码对你不可用。通常使用类别将方法添加到已经存在的类中,例如,在Cocoa框架中定义的类。添加的方法被子类继承,在运行时无法与原始类方法区分开。在自定义的类中也可以使用类别。

给一个类添加方法,可以在接口文件中类别名称下声明方法,并在实现文件中相同的名字下定义方法。类别名称表明这些方法是在其他地方声明的某个类的扩展,而不是一个新的类。

声明

类别接口的声明很像类接口声明,除了类别名称列在类名后的圆括号内,而父类并没有此要求。类别必须导入接口文件来扩展类。

<pre><code>
\#import "SystemClass.h"

@interface SystemClass (CategoryName)

// method declarations

@end

</pre></code>

通用命名规则是类别的基本文件名是类别扩展的类名+分类名。类别声明为SystemClass+CategoryName.h

如果使用类别来声明自定义类的私有方法,可以将实现文件中的声明放在@implementation block之前。

<pre><code>
\#import "MyClass.h"

@interface MyClass (PrivateMethods)

// method declarations

@end

@implementation MyClass

// method definitions

@end

</pre></code>

实现

如果使用类别来声明自定义类的私有方法,可以在类的 @implementation block中添加实现。如果使用类别来扩展一个没有源代码的类或者分发实现自定义类,可以在名为+CategoryName.m 文件中添加实现。实现和其他一样,导入自己的接口。类别的实现如下:
<pre><code>
\#import "SystemClass+CategoryName.h"

@implementation SystemClass ( CategoryName )

// method definitions

@end

</pre></code>

官方原文地址:

https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/Category.html

上一篇下一篇

猜你喜欢

热点阅读