Обычно делегаты не сохраняются, чтобы избежать циклов сохранения. Если делегат может быть освобожден до вас, тогда он обязан очистить вашу ссылку до того, как он будет окончательно освобожден (например, в его освобождении).
Однако, если какое-либо свойство установлено на «сохранить» или «копировать», вы должны сохранить / скопировать его в установщик (или использовать @synthesized setters, который сделает это за вас), и освободить его в dealloc, чтобы избежать протечки. Как уже было сказано выше, это может привести к циклу сохранения, так что ни один объект никогда не будет освобожден.
Я бы посоветовал вам включить некоторую отладку памяти с помощью переменных окружения NSZombieEnabled и NSAutoreleaseFreedObjectCheckEnabled и посмотреть, сообщает ли он, какой объект перевыпущен.