Из яблочных документов:
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html
Протоколы объявляют методы, которые могут быть реализованы любым классом. Протоколы полезны как минимум в трех ситуациях:
- Чтобы объявить методы, которые другие должны реализовать
- Чтобы объявить интерфейс к объекту, скрывая его класс
- Чтобы зафиксировать сходство между классами, которые не связаны иерархически
В частности, в качестве примера я также использовал протоколы для реализации модели провайдера, в которой я абстрагирую полные части системы. Например, чтобы разделить мой код немного больше, я мог бы создать поставщика данных. У меня мог быть провайдер sqlite, провайдер файлов и т. Д. Протокол позволяет мне их отделить.
В этом случае каждый из провайдеров не наследует друг друга, но все они реализуют один и тот же шаблон с различными внутренними компонентами. Думайте о протоколе как о шаблоне, которому вы соответствуете - или о контракте, если вы думаете о нем как об интерфейсе.
Надеюсь, это поможет.