В чем разница между формальными и неформальными протоколами в Objective-C? - PullRequest
39 голосов
/ 21 июня 2010

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

Ответы [ 3 ]

58 голосов
/ 21 июня 2010

От Официальная документация

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

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

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

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

15 голосов
/ 07 сентября 2015

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

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

2 голосов
/ 05 января 2012

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

...