расширить протокол в частном порядке, используя категорию в цели c - PullRequest
3 голосов
/ 14 марта 2011

провел некоторый поиск и не нашел много, но задается вопросом, возможно ли расширить протокол.

В настоящее время в MyDelegate.h есть:

@protocol MyDelegate <NSObject>

в надеждесоздайте закрытый заголовок MyDelegate + Private.h, чтобы не предоставлять клиенту дополнительные необязательные методы.

@protocol MyDelegate (Private) <NSObject>

это, похоже, не работает.Является ли это возможным?хотел бы избежать создания совершенно нового протокола делегата, который содержит расширенный набор текущего протокола.

1 Ответ

4 голосов
/ 14 марта 2011

Я не думаю, что вы можете создать категорию на протоколе, но вы можете создать протокол с использованием протокола и сохранить его в частном заголовке.Apple делает это довольно часто в своих рамках.

@protocol MyDelegate_Private <MyDelegate>
- (void)myRequiredPrivateMethod;
@optional
- (void)myOptionalPrivateMethod;
@end

Затем вы указываете этот протокол при объявлении класса.Чтобы скрыть тот факт, что существует частный протокол, используйте открытый заголовок, который объявляет класс как реализующий открытый протокол, и частный заголовок, который объявляет его как реализующий частный протокол.

Кроме того, если вы используете только необязательныйметоды в протоколе, вам не нужно создавать протокол.Все, что он делает - это указывает список методов, которые могут быть реализованы, и поскольку он используется только в личных целях, в этом нет необходимости.Вы могли бы просто сказать, что класс реализует открытый протокол и «просто случается» также реализовывать эти другие методы, которые не включены в интерфейс.

...