Зачем использовать протокол Objective C, если все методы являются необязательными? - PullRequest
1 голос
/ 05 июля 2011

У меня всегда было впечатление, что протокол должен помочь мне реализовать определенные методы, чтобы мой объект реагировал на определенные сообщения.Если я забуду метод или введу его неправильно, компилятор скажет мне.

Но какая польза от установки протокола для класса, когда все методы являются необязательными?Как в протоколе NSSpeechSynthesizerDelegate.Компилятор не напоминает мне о реализации некоторых методов, и он не говорит, правильно ли я написал имя метода.И программа отлично работает даже без протокола.

Ответы [ 4 ]

2 голосов
/ 05 июля 2011

Если вы реализуете собственный протокол делегата, вы получите предупреждения компилятора, если попытаетесь вызвать методы без их объявления где-либо (x может не отвечать на селектор ...).

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

Когда вы начнете вводить новый метод в своем классе, Xcodeтакже достаточно умен, чтобы предлагать сигнатуры методов из протоколов, которым соответствует ваш класс.

0 голосов
/ 30 августа 2011

В ООП распространено программирование по интерфейсу (в протоколах для целей c это интерфейсы), а не реализация, потому что это гибкий и мощный способ реализации надежной программной архитектуры, в которой вам не нужно заботиться о том, как класс реализован, но только для того, чтобы соответствовать определенному интерфейсу. (поиск в Google по поводу аргумента: http://www.google.com/search?hl=en&source=hp&biw=1436&bih=768&q=program+by+interface+not+by+implementation&oq=program+by+inter&aq=2j&aqi=g-j2&aql=&gs_sm=e&gs_upl=849l7924l0l10059l20l16l2l3l3l0l283l1295l7.3.1l11l0)

0 голосов
/ 30 августа 2011

потому что ваша программа не обязательно интересуется all , но some .важная часть для вашей реализации - , которая .

0 голосов
/ 05 июля 2011

Вы можете опустить протокол со всеми необязательными методами и , если они вам вообще не нужны . Док говорит,

Однако программе Objective-C не нужно использовать протоколы.В отличие от определений классов и выражений сообщений, они являются необязательными.Некоторые платформы Какао используют их;некоторые нет.Все зависит от поставленной задачи.

Если вам не нужна помощь таких протоколов, вы можете просто опустить ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...