Считать производительность хорошей идеей (лучше делегировать для небольшого числа объектов с уведомлением, лучше использовать центр уведомлений для большего количества объектов, или это? Запустить профилировщик), но я думаю, что более важный фактор, так как вы говорите об Objective -C и менее вероятно говорить о действительно высокопроизводительных частях вашей кодовой базы, которые, вероятно, будут написаны на C, уменьшает зависимость времени компиляции между модулями.
Ничто не мешает иметь массив делегатов, а не один делегат.
Я мог бы использовать NSNotificationCenter только для статуса всех компонентов сетевого стека, которые я делаю, и любых пользовательских интерфейсов мониторинга состояния устройства. Но для большинства связей, не связанных с глобальным статусом приложения, я думаю, что в большинстве случаев проще использовать обычные интерфейсные контракты в Objective-C и легче следовать людям, которые идут за вами, чем использовать NSNotificationCenter. На самом деле я никогда не использовал NotificationCenter для своих собственных пользовательских событий и предпочитаю использовать делегаты для облегчения понимания кода кем-то, кто читает мой код.
И, наконец, конечно, с уведомлениями в / из стандартного API у вас нет выбора, и вы должны использовать любой из двух методов, которые Apple предписывает для данного события.