Это схожие идеи в том, что один объект опирается на помощь другого.Вот как я думаю о двух идеях, учитывая мой сильный уклон Objective-C:
делегирование: Решение должно быть принято, но я не хочу его принимать.Я позволю своему делегату справиться с этим.
Например, в Какао NSTableView использует делегата для настройки поведения таблицы.Делегирование обеспечивает способ настройки одного объекта, позволяя другому объекту, делегату, обеспечивать настройку.Продолжая этот пример, делегат табличного представления реализует интерфейс NSTableViewDelegate , который таблица использует для общения со своим делегатом.
forwarding: Кто-то только что отправил мне сообщение, котороеЯ не понимаю, но я знаю другой объект, который может его реализовать.Я передам вызов этого сообщения этому объекту.
В Какао, опять же, любой класс может реализовать метод -forwardInvocation: .Если сообщение отправляется объекту, который его не реализует, вызывается метод -forwardInvocation: этого объекта, и объект может принять решение передать вызов другому объекту.Этот объект может быть его делегатом, или это может быть какой-то общесистемный обработчик ошибок или что-то еще. NSProxy использует это для реализации всех методов - он просто передает вызов своему главному объекту.
Обратите внимание, что при пересылке не существует определенного делегатаинтерфейс;сообщение просто передается другому объекту.В другом месте вы видите, что я бы назвал переадресацией, когда один объект содержит другой объект, который он использует для реализации некоторого интерфейса.Любые сообщения этому интерфейсу просто перенаправляются на содержащийся объект, который выполняет всю работу.