Делегат — способ организации callback'ов/обработки сообщений. Сразу видно, какие сообщения можно обработать, код собирается в одном месте и т. п. Например, в Win32 вместо делегата пишется свой обработчик сообщений, который фильтрует нужные, а для остальных вызывает процедуру по умолчанию; в Cocoa процедура по умолчанию выполняется всегда, но если есть делегат, она передает некоторые сообщения ему.