В чем разница между формальным и неформальным протоколами в Objective-C?

В чем разница между формальным и неформальным протоколами в Objective-C?

3 ответа

Решение

Из официальной документации

Формальные и неформальные протоколы

Существует два варианта протокола: формальный и неформальный:

  • Неформальный протокол - это категория для NSObject, которая неявно делает практически все объекты принимающими протокол. (Категория - это языковая функция, которая позволяет добавлять методы в класс без его подкласса.) Реализация методов в неофициальном протоколе не является обязательной. Перед вызовом метода вызывающий объект проверяет, реализует ли его целевой объект. До тех пор, пока в Objective-C 2.0 не были введены дополнительные методы протокола, неофициальные протоколы были важны для способа, которым классы Foundation и AppKit реализовали делегирование.

  • Формальный протокол объявляет список методов, которые должны реализовывать клиентские классы. Формальные протоколы имеют собственный синтаксис объявления, принятия и проверки типов. Вы можете назначить методы, реализация которых является обязательной или необязательной, с помощью ключевых слов @required и @optional. Подклассы наследуют формальные протоколы, принятые их предками. Формальный протокол также может принимать другие протоколы.

Формальные протоколы являются расширением языка Objective-C.

Неофициальный протокол: Category (Реализации являются необязательными)

Формальный протокол: Extension (Реализации являются необязательными и обязательными)

Язык Objective-C предоставляет способ формально объявить список методов (включая объявленные свойства) как протокол. Формальные протоколы поддерживаются языком и системой времени выполнения. Например, компилятор может проверять типы на основе протоколов, а объекты могут анализировать во время выполнения, чтобы сообщить, соответствуют ли они протоколу.

Другие вопросы по тегам