在仔细阅读Apple Header文件时,我注意到他们使用类别为同一个对象声明了多个接口。
例如:NSDictionary.h
@interface NSDictionary : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration>
//methods
@end
@interface NSDictionary (NSExtendedDictionary)
//methods
@end
@interface NSDictionary (NSDictionaryCreation)
//methods
@end
这纯粹是一种帮助组织代码的方法吗?作为用户没有区别,所有类别中的所有方法在使用NSDictionary
时都会出现。
还有其他一些有用的结果吗?
答案 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 - 那些会以这种方式编写代码的人。