И self.myStr = nil
, и [myStr release]
в конечном итоге делают одно и то же.
Вызов [myStr release]
очевиден и просто освобождает его.
Между тем, метод установки для myStr выглядит примерно следующим образом:
- (void)setMyStr:(NSString *)newMyStr
{
[newMyStr retain];
[myStr release];
myStr = newMyStr;
}
Итак, когда мы делаем self.myStr = nil
, мы сначала сохраняем нулевой объект, который ничего не делает. Затем мы освобождаем старую переменную, чего мы и хотим. Наконец, мы устанавливаем указатель на ноль.
Какая разница? Последний устанавливает указатель на ноль. Это лучше, потому что если мы (случайно) отправим сообщение освобожденному объекту, мы потерпим крах, если указатель не равен нулю (EXC_BAD_ACCESS). Теперь, честно говоря, поскольку вы находитесь в -dealloc, объект все равно уничтожается, поэтому не имеет значения, что вы используете.