Я думаю, что Пол Хегарти из Стэнфордского университета дал очень хорошее резюме о том, как использовать протокол в Уроке 9, приложения для разработки для iOS, осенняя сессия 2011 года (доступно в iTunes, проверьте блог Пола):
- Создать @ протокол
- Добавить делегата @property в открытый интерфейс делегата @ 1008 *
- Использовать свойство делегата внутри реализации делегатора
- Установить свойство делегата где-нибудь внутри делегата @ implmentation
- Реализация метода (ов) протокола в делегате (включая <> на @interface)
Павел также привел пример использования протокола в приложении калькулятора.

Сначала создается протокол:
@protocol CalculatorProgramsTableViewControllerDelegate
@optional
- (void)calculatorProgramsTableViewController:
(CalculatorPorgramTableViewController *)sender
choseProgram:(id)program;
@end
Шаг 2). В табличном представлении CalculatorProgramsTableViewController.h делегат определяется как свойство слабо связанного идентификатора:
@interface CalculatorProgramsTableViewController : UITableViewController
...
// Define a property delegate
@property (nonatomic, weak) id<CalculatorProgramsTableViewControlerDelegate>
delegate;
...
@end
Используя протокол, табличное представление сможет отправлять сообщение об изменении программы, но представление не знает о графическом представлении. Это делается на следующем шаге.
Шаг 3). В контроллере табличного представления делегат используется для отправки сообщения об измененной программе:
#progma mark - UITableViewDelegate
- (void)tableView:(UITableView *)tableView
didSeelectRowAtIndexPath:(NSIndexPath *)indexPath
{
id program = [self.programs objectAtIndex:indexPath.row];
[self.delegate calculatorProgramsTableViewController:self
choseProgram:porgram];
}
Шаг 4). Где был установлен делегат? Это устанавливается в calculatorGraphViewController (вид справа в режиме разделения). Когда программа готова выдвинуть всплывающее представление (табличное представление), она устанавливает себя в качестве делегата:
@implementation CalculatorGraphViewController
...
- (void)prepareForSegue:(UIStoryboardSegue *)segue
sender:(id)sender
{
if ([segue.identifier isEqualToString:@"Show Favorite Graphics"]) {
NSArray * programs = [[NSUserDefaults standardUserDefaults]
objectForKey:FAVORITES_KEY];
[segue.destinationViewController setPrograms:programs];
[segue.destinationViewController setDelegate:self]; // set delegate
}
}
Графическое представление не знает о табличном представлении, канал связи построен по протоколу, прекрасно выполнен без какой-либо связи! Чтобы любой делегат мог перезвонить по этому протоколу, файл .h контроллера графического представления должен реализовывать протокол:
// .h to implement the protocol
@interface CalculatorGraphViewController :NSObject
<CalculatorProgramsTableViewControllerDelegate>
...
@end
И метод протокола определен в файле .m на следующем шаге.
Последний шаг. Метод протокола делегата реализован в контроллере segue. Метод протокола будет вызываться при выборе строки в табличном представлении:
// implement delegate method
- (void)calculatorProgramsTableViewController:(CalculatorProgramsTableViewController *)sender
chooseProgram:(id)program
{
self.calculatorProgram = program;
}
Выше приведен типичный способ использования протокола в приложении iOS.