Зачем использовать «ноль» после освобождения объектов - PullRequest
0 голосов
/ 28 декабря 2011

Иногда я видел этот тип кодирования в target-c. Зачем устанавливать _imageView на ноль после освобождения.

 - (void)dealloc {
    [_imageView release];
    _imageView = nil;
    [super dealloc];
 }

Ответы [ 3 ]

5 голосов
/ 28 декабря 2011

Это сделано для того, чтобы вы не пытались повторно использовать только что выпущенный объект.

Установив для него значение nil, вы гарантируете, что любые будущие сообщения на него будут отбрасываться (поведение для стандартного объекта nil), а не вызывать проблему.

2 голосов
/ 28 декабря 2011

Только потому, что это безопасная практика.

В dealloc это не имеет особого смысла, если вы не используете потоки, но в противном случае всегда полезно делать это каждый раз, когда вы присваиваете nil объекту (если это не свойство).

1 голос
/ 28 декабря 2011

Насколько я понимаю, в dealloc нет необходимости. Однако при освобождении объекта в любом другом методе указатель все равно остается, но объект, на который он указывает, больше не будет существовать, вызывая сбой при отправке ему сообщения.

Установив указатель на nil, вы уверены, что любое отправленное ему сообщение будет просто проигнорировано, вместо того, чтобы вывести из строя ваше приложение (или вызвать странное поведение).

...