Главная » iPhone, Objective-C, Программирование для iOS и MacOS » Обратный вызов Objective-C

0

До настоящего момента всем распоряжался ваш код. Он отправлял сообщения стандартным объектам Foundation (скажем, экземплярам  NSString и NSArray) и отдавал им приказы. До настоящего момента ваши программы выполнялись и завершались за считанные миллисекунды.

В   реальном   мире   приложения   могут   выполняться   часами,   а   объекты

подчиняются потоку событий от пользователя, системных часов, сети и т. д.

В реальном приложении должен существовать объект, который ожидает таких событий, как перемещения мыши, прикосновения к экрану, таймеры и сетевые операции. В Мас OS Х·и iOS таким объектом является экземпляр цикла событий NSRunLoop. Обычно он сидит и ждет, а когда в системе что-то происходит – отправляет сообщение другому объекту.

Ситуация, в которой код ожидает внешних событий, называется обратным

вызовом. Для программистов Objective-C существуют три основных формы обратного вызова. (Так как приведенные концепции имеют общий характер, я буду обозначать произошедшее «нечто» буквой «Х», а подробности будут приведены ниже.)

•  Приемник/действие: перед началом ожидания вы говорите: «Когда произойдет Х, отправь это конкретное сообщение этому конкретному объекту». Объект, получающий сообщение, называется приемником. Селектор сообщения и есть действие.

•  Вспомогательные объекты: перед началом ожидания вы говорите: «Здесь имеется вспомогательный объект, поддерживающий твой протокол. Когда что-нибудь произойдет, отправляй ему сообщения». Вспомогательные объекты часто называются делегатами или источниками данных.

•  Оповещения: имеется объект, называемый центром оповещений. Перед началом ожидания вы говорите ему: «Этот объект ожидает таких-то оповещений. При поступлении одного из них отправь объекту это сообщение». Когда происходит Х,

объект отправляет оповещение центру оповещений, а последний пересылает его вашему объекту.

В этой главе мы реализуем все три типа обратных вызовов, а также разберемся, в каких обстоятельствах применяется каждый из них.

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии