Делегат - это просто объект, который другой объект может использовать для запроса или настройки поведения;ни больше ни меньше.Нет обработчиков событий.Это шаблон, который используется, чтобы избежать массивной путаницы подклассов, которую вы часто видите в других объектно-ориентированных наборах пользовательского интерфейса.
Например, вместо того, чтобы создавать подклассы NSWindow для обеспечения настраиваемого поведения при изменении размера, вы просто реализуете несколькометоды где-то в классе и использовать экземпляр этого класса в качестве делегата.Поскольку такая реализация обычно зависит от информации уровня управления или уровня модели, гораздо более естественно использовать класс уровня управления в качестве делегата, а не подкласса NSWindow, и не загрязнять объекты уровня представления функциональностью уровня управления.
Под прикрытием делегаты мертво просты.При изменении размера NSWindow просто спрашивает делегата: «Отвечаете ли вы на метод windowWillResize:toSize:
и, если он это делает, вызывает его в нужное время; в этом нет ничего, кроме objc_msgSend ().