Делегирование — это объектно-ориентированный шаблон проектирования, определяющий отношение между двумя объектами, где поведение первого объекта специально настраивается или поддерживается вторым объектом.

В этом случае второй объект является делегатом первого. Для этого не требуется никакого наследования, и на самом деле первому объекту вообще ничего неизвестно о классе второго объекта.

Делегирование в среде Cocoa реализовано следующим образом. Встроенный класс Cocoa имеет переменную экземпляра, обычно называемую delegate (или хотя бы содержащую упоминание о делегате в своем имени). В переменной некоторого экземпляра этого класса Cocoa в качестве значения задается экземпляр одного из классов прикладного кода. В какие-то моменты своего действия класс Cocoa берет на себя обязательство обратиться к своему делегату за инструкциями, посылая ему некоторое сообщение. Если экземпляр класса Cocoa обнаружит, что его делегат не является пустым (nil) и готов к приему этого сообщения (см. описание метода respondsToSelector: в главе 10), то он посылает сообщение своему делегату.

Как пояснялось в главе 10, одним из основных примеров применения протоколов в среде Cocoa является делегирование. В прошлом методы делегата перечислялись в документации на класс Cocoa, а их сигнатуры становились известными компилятору через неформальный протокол (категорию в классе NSObject). Теперь методы делегата такого класса обычно перечисляются в документации на оригинальный протокол. В среде Cocoa насчитывается более 7 0 протоколов делегата, что явно свидетельствует о широком их применении в этой среде. Большинство методов делегата являются необязательными, но в некоторых случаях могут потребоваться и обязательные методы.


 

 

 

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