Определение категорий для протоколов в Objective-C?

В Objective-C я могу добавлять методы к существующим классам с категорией, например,

@interface NSString (MyCategory)
- (BOOL) startsWith: (NSString*) prefix;
@end

Возможно ли это сделать также с протоколами, т. Е. Если был протокол NSString, что-то вроде:

@interface <NSString> (MyCategory)
- (BOOL) startsWith: (NSString*) prefix;
@end

Я хочу сделать это, так как у меня есть несколько расширений для NSObject (класса), использующих только общедоступные методы NSObject, и я хочу, чтобы эти расширения также работали с объектами, реализующими протокол.

Чтобы дать еще один пример, что если я хочу написать метод logDescription, который печатает описание объекта в журнал:

- (void) logDescription {
    NSLog(@"%@", [self description]);
}

Конечно, я могу добавить этот метод в NSObject, но есть и другие классы, которые не наследуются от NSObject, где я также хотел бы иметь этот метод, например, NSProxy. Поскольку метод использует только открытые члены протокола, было бы лучше добавить его в протокол.

Редактировать: Java 8 теперь имеет это с «виртуальными методами расширения» в интерфейсах:http://cr.openjdk.java.net/~briangoetz/lambda/Defender%20Methods%20v4.pdf, Это именно то, что я хотел бы сделать в Objective-C. Я не видел этот вопрос, заслуживающий такого большого внимания ...

С уважением, Йохен

Ответы на вопрос(7)

Ваш ответ на вопрос