При вызове делегата вы всегда должны проверять, не является ли он нулевым. Это частая причина ошибок. Поскольку делегаты - это более или менее просто список функций, я предполагаю, что это могло быть легко проверено самим делегатом.
Кто-нибудь знает, почему он был реализован как есть?