Установка делегата на ноль в dealloc - PullRequest
8 голосов
/ 25 мая 2011

В Objective-C я понимаю, что если объект устанавливает себя в качестве делегата другого объекта, ему следует установить делегат этого объекта равным nil в его dealloc, чтобы избежать получения отправленных сообщений после его исчезновения.

Однако при использовании Accessorizer (утилиты Xcode) генерируемый код заглушки также помещает delegate = nil в dealloc класса, который имеет переменную экземпляра делегата. Какова цель этого?

1 Ответ

11 голосов
/ 25 мая 2011

Это защитный ход программирования.Он очищает ссылку на объект делегата, если что-то еще в вашем объекте пытается получить доступ к делегату после того, как вы сказали, что с ним покончено.Как часть вашего решения, у вас может быть метод или что-то, что вызывает уведомление KVO, которое вызывает делегата.Так что установка ссылки делегата на ноль предотвращает это.Если это случится, вы можете столкнуться со странными авариями, которые интересно воспроизвести и исправить.

...