В Интернете или в документации можно периодически встретить обозначение неформальный протокол.

Такой протокол на самом деле вообще не является протоколом. Это лишь способ предоставить компилятору сигнатуру метода, чтобы отправлять сообщения без всяких возражений со стороны компилятора.

Неформальный протокол можно реализовать двумя взаимодополняющими способами. Один из них состоит в том, чтобы определить категорию в классе NSObject. Благодаря этому любой объект имеет право получать сообщения от методов, перечисленных в категории. Другой способ состоит в том, чтобы определить протокол, которому формально не соответствует ни один из классов. В этом случае любое сообщение, посылаемое от любых методов, перечисленных в протоколе, достигнет только тех объектов, которые обозначаются как id, и благодаря этому устраняются любые возражения со стороны компилятора.

Неформальные протоколы широко применялись, прежде чем в протоколах появилась возможность объявлять методы как необязательные, но теперь особой необходимости в них нет. (Хотя такие протоколы по-прежнему применяются, это делается все реже. Так, в версии iOS 7 уже осталось очень мало неформальных протоколов.) Кроме того, неформальные протоколы несколько опасны, поскольку они позволяют неумышленно определить метод с тем же именем, что и у существующего метода, но с другой сигнатурой и непредсказуемыми последствиями.


 

 

 

Добавить комментарий