Протоколы — это способ указать набор методов, которые вы хотите реализовать в классе, если он хочет работать с одним из ваших классов. Делегаты и источники данных, такие как UITableViewDelegate и UITableViewDataSource, являются протоколами.

Обычно объект, реализующий протокол (объект Apple), должен иметь дело с методом протокола самостоятельно. Но объекту (Object Zebra) все равно, как методы протокола реализованы в Object Apple. Важно то, что Object Apple соглашается реализовать методы протокола, поэтому Object Zebra может отправлять сообщения Object Apple, предполагая, что все будет работать хорошо. Никаких формальных отношений между Object Apple и Object Zebra не требуется.

Делегаты — это использование языковой функции протоколов. Шаблон проектирования делегирования — это способ разработки кода для использования протоколов там, где это необходимо. В структуре Cocoa шаблон проектирования делегата используется для указания экземпляра класса, который соответствует определенному протоколу. Этот конкретный протокол определяет методы, которые класс делегата должен реализовать и выполнить для протокола, поэтому он знает, что может вызывать реализованные методы при любом заданном событии, на которое он решит воздействовать. Шаблон проектирования — отличный способ разделить классы и упростить замену одного экземпляра делегата на другой.