Заголовки Apple содержат несколько категорий - PullRequest
3 голосов
/ 04 мая 2011

Просматривая некоторые файлы 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 ]

6 голосов
/ 04 мая 2011

nielsbot имеет правильную идею, но есть конкретная техническая причина для категорий.Вы можете поместить реализации в отдельных файлах.(Ну, разные единицы перевода с технической точки зрения.)

Файл 1:

@implementation NSDictionary
...
@end

Файл 2:

@implementation NSDictionary (NSExtendedDictionary)
...
@end

Файл 3:

@implementation NSDictionary (NSDictionaryCreation)
...
@end
3 голосов
/ 04 мая 2011

Уверен, это дело организации. Мне не известно о каких-либо других преимуществах использования категорий в общедоступном заголовочном файле. (Они, конечно, полезны для вставки новых методов в существующие классы)

EDIT: Проверьте Википедию. Кажется, у них довольно авторитетный ответ:

Во время разработки Objective-C одной из главных проблем была ремонтопригодность больших баз кода. Опыт мира структурированного программирования показал, что одним из основных способов улучшения кода было разбиение его на более мелкие части. Objective-C заимствовал и расширил концепцию категорий из реализаций Smalltalk, чтобы помочь в этом процессе. [9]

из http://en.wikipedia.org/wiki/Objective-C#Categories

Кажется, это тоже подходит, так как системные заголовки исходят от NeXT - это парни, которые пишут код таким образом.

...