Вызов release
для объекта не обязательно означает, что он будет освобожден. Это просто уменьшает количество сохраняемых объектов. До тех пор, пока счетчик сохранений не достигнет 0, объект будет освобожден (и даже в этом случае объект может находиться в пуле автоматического выпуска и все равно не будет освобожден совсем).
Итак, вы можете освободить свой объект, но вы все равно можете указывать на него. И тогда он может получить авто-релиз. И тогда вы отправляете ему сообщение - но, возможно, объект теперь мусор. Это плохо.
Установка указателя на ноль после освобождения означает, что вы не можете отправить сообщение объекту, на который надето. Вы сделали с этим объектом, и вы можете сказать, что вы хотите nil
, без вреда.