Делегация

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

Делегация и платформы какао

Объект делегирования обычно является объектом платформы, и делегат обычно является пользовательским объектом контроллера. В среде управляемой памяти объект делегирования поддерживает слабую ссылку на своего делегата; в собравшей «мусор» среде получатель поддерживает сильную ссылку своему делегату. За примерами делегации недалеко ходить в Основе, UIKit, AppKit и других Сенсорных платформах Какао и Какао.

Примером объекта делегирования является экземпляр NSWindow класс платформы AppKit. NSWindow объявляет протокол, среди методов которого windowShouldClose:. Когда пользователь щелкает по рамке для закрытия в окне, объект окна отправляет windowShouldClose: его делегату, чтобы попросить, чтобы он подтвердил закрытие окна. Делегат возвращает булево значение, таким образом управляя поведением объекта окна.

Framework object sending a message to its delegate

Делегация и уведомления

Делегат большинства классов платформы Какао автоматически регистрируется как наблюдатель уведомлений, отправленных объектом делегирования. Делегат должен только реализовать метод уведомления, который, как объявляет класс платформы, получил определенное уведомление. Следуя примеру выше, объект окна отправляет NSWindowWillCloseNotification наблюдателям, но отправляет a windowShouldClose: обменивайтесь сообщениями его делегату.

Источник данных

Источник данных почти идентичен делегату. Различие находится в отношении с объектом делегирования. Вместо того, чтобы быть делегированным управление пользовательского интерфейса, источник данных является делегированным управлением данных. Объект делегирования, обычно объект представления, такой как табличное представление, содержит ссылку на свой источник данных и иногда просит у него данные, которые это должно вывести на экран. Источник данных, как делегат, должен принять протокол и реализацию в минимуме требуемые методы того протокола. Источники данных ответственны за управление памятью объектов модели, которые они дают представлению делегирования.

Необходимые как условие статьи

Категорическое обсуждение

Проекты примера кода