Является ли установка свойства равной нулю так же, как освобождение свойства? - PullRequest
4 голосов
/ 23 мая 2011

В чем разница между

self.myObject = nil;

и

[myObject release];

Кроме того, почему первый обычно используется в методе viewDidUnload, а второй - в методе dealloc?

Ответы [ 2 ]

8 голосов
/ 23 мая 2011

Если предположить свойство retain, то это:

self.myObject = nil;

освободит объект и установит значение свойства nil.Это также будет сделано через метод установки, возможно, вызывая уведомления KVO.И это:

[myObject release];

будет только освобождать объект, оставляя в свойстве висячий указатель.

Последний обычно используется в -dealloc, потому что вы нене заботится о значении переменной после того, как объект был освобожден, а также потому, что вы не хотели бы запускать уведомления KVO от разрушаемого объекта.Первый используется почти везде.

1 голос
/ 23 мая 2011

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

Был блог пост Джеффа Ламарша некоторое времяназад о "ноль или не ноль".Посмотрите, особенно на последний раздел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...