Зачем мне делать полностью необязательный протокол сообщений? - PullRequest
1 голос
/ 27 марта 2009

Я пишу API Какао для проекта, и API принимает делегата. Протокол, который я придумал, объявляет все методы необязательными, но зачем мне это делать, вместо того, чтобы просто документировать методы делегата в заголовочном файле и принимать простой идентификатор в качестве параметра?

Ответы [ 3 ]

6 голосов
/ 27 марта 2009

Для блага ваших пользователей. Если объект принимает делегатов, соответствующих какому-либо протоколу, и они передают что-то еще, компилятор может сказать им. Это невозможно, если вы берете идентификатор и используете категорию в качестве интерфейса метода делегата.

2 голосов
/ 27 марта 2009

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

0 голосов
/ 29 мая 2009

Он также создает код, который более пригоден для использования в IDE. Например, если я смотрю на

@interface MyController : NSObject <FooBarDelegate> {
}
@end

Я могу команду + двойной щелчок в XCode, чтобы перейти к определению FooBarDelegate. Для категории нет официального заявления о намерении стать делегатом.

Кроме того, @required может стать проблемой для будущих планов в отношении обратной двоичной совместимости и новой подписи предпочтительного метода.

...