Objective-c category(类别)

2016-04-15  本文已影响30人  dacheng

除了继承,我们还可以使用类别来为已有的类添加新方法,即使该类的源码是非公开的。例如你可以为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
上一篇下一篇

猜你喜欢

热点阅读