Бывает такая штука в протоколах как необязательные / опциональные методы @optional. При работе с объектами/классами, особенно в больших проектах, заведомо не знаешь реализован тот или иной необязательный метод в классе, например, другим разработчиком класса. При компиляции проекта, компилятор не укажет на это даже в варнингах (warnings). После запуска приложения и обработке входящих объектов, в которых из них не будет реализации опциональных методов, естественно приложение упадет. Для проверки реализации опционального метода в классе/объекте рекомендуется использовать селекторы, т.е. вся отвественность ложиться на разработчика:
[objectName respondToSelector:@selector(protocolMethodName)]
т.е. здесь мы проверяем реализован ли в объекте/классе objectName метод описанный в протоколе protocolMethodName. Результат булевый YES | NO.
Как узнать, использует ли объект/класс протокол (подключен ли протокол)?:
[objectName conformsToProtocol:@protocol(protocolName)]
Результат булевый YES | NO.
[objectName respondToSelector:@selector(protocolMethodName)]
т.е. здесь мы проверяем реализован ли в объекте/классе objectName метод описанный в протоколе protocolMethodName. Результат булевый YES | NO.
Как узнать, использует ли объект/класс протокол (подключен ли протокол)?:
[objectName conformsToProtocol:@protocol(protocolName)]
Результат булевый YES | NO.
0 коментарі:
Отправить комментарий