Apple标头包含多个类别

时间:2011-05-04 01:27:10

标签: objective-c cocoa categories

在仔细阅读Apple Header文件时,我注意到他们使用类别为同一个对象声明了多个接口。

例如:NSDictionary.h

@interface NSDictionary : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration>

//methods

@end

@interface NSDictionary (NSExtendedDictionary)

//methods

@end

@interface NSDictionary (NSDictionaryCreation)

//methods

@end

这纯粹是一种帮助组织代码的方法吗?作为用户没有区别,所有类别中的所有方法在使用NSDictionary时都会出现。

还有其他一些有用的结果吗?

2 个答案:

答案 0 :(得分:6)

nielsbot有正确的想法,但这些类别有一个特定的技术原因。您可以将实现放在单独的文件中。 (从技术上讲,不同的翻译单元。)

文件1:

@implementation NSDictionary
...
@end

文件2:

@implementation NSDictionary (NSExtendedDictionary)
...
@end

文件3:

@implementation NSDictionary (NSDictionaryCreation)
...
@end

答案 1 :(得分:3)

很确定这是组织的事情。我不知道在公共头文件中使用Categories的任何其他好处。 (它们当然对将新方法插入现有类很有用)

编辑: 查看维基百科。他们似乎有一个非常权威的答案:

在Objective-C的设计过程中,主要关注点之一是大型代码库的可维护性。结构化编程世界的经验表明,改进代码的主要方法之一是将其细分为更小的部分。 Objective-C从Smalltalk实现中借用并扩展了类别的概念,以帮助完成此过程。[9]

来自http://en.wikipedia.org/wiki/Objective-C#Categories

似乎也很合适,因为系统标题来自NeXT - 那些会以这种方式编写代码的人。