В чем разница между формальным и неформальным протоколами в Objective-C?
В чем разница между формальным и неформальным протоколами в Objective-C?
3 ответа
Формальные и неформальные протоколы
Существует два варианта протокола: формальный и неформальный:
Неформальный протокол - это категория для NSObject, которая неявно делает практически все объекты принимающими протокол. (Категория - это языковая функция, которая позволяет добавлять методы в класс без его подкласса.) Реализация методов в неофициальном протоколе не является обязательной. Перед вызовом метода вызывающий объект проверяет, реализует ли его целевой объект. До тех пор, пока в Objective-C 2.0 не были введены дополнительные методы протокола, неофициальные протоколы были важны для способа, которым классы Foundation и AppKit реализовали делегирование.
Формальный протокол объявляет список методов, которые должны реализовывать клиентские классы. Формальные протоколы имеют собственный синтаксис объявления, принятия и проверки типов. Вы можете назначить методы, реализация которых является обязательной или необязательной, с помощью ключевых слов @required и @optional. Подклассы наследуют формальные протоколы, принятые их предками. Формальный протокол также может принимать другие протоколы.
Формальные протоколы являются расширением языка Objective-C.
Неофициальный протокол: Category
(Реализации являются необязательными)
Формальный протокол: Extension
(Реализации являются необязательными и обязательными)
Язык Objective-C предоставляет способ формально объявить список методов (включая объявленные свойства) как протокол. Формальные протоколы поддерживаются языком и системой времени выполнения. Например, компилятор может проверять типы на основе протоколов, а объекты могут анализировать во время выполнения, чтобы сообщить, соответствуют ли они протоколу.