Управление памятью на iPhone с viewDidUnload - PullRequest
3 голосов
/ 16 августа 2010

Если в viewDidUnload для свойства установлено значение nil, нужно ли снова его отпускать в dealloc?

1 Ответ

4 голосов
/ 16 августа 2010

Нет, но:

  • Вам не нужно проверять этот случай. [nil release] нормально.
  • Вы не можете рассчитывать на viewDidUnload, когда вам звонят.

Так что просто отпустите как обычно в -dealloc.

Конечно, вы должны убедиться, что вы действительно выпустили предыдущий объект. Вы неявно делаете это , если использовали синтезированный сеттер :

self.myProperty = nil;  // good
// or
[self setMyProperty:nil]; // also good

Но при установке значения ivar на nil произойдет утечка:

self->myProperty = nil; // leaky as a sieve
// or 
myProperty = nil; // as useful as a screen door on a submarine

Это распространенные ошибки.

Также обратите внимание, что установка свойств на nil в -dealloc - плохая идея. Как отмечает Кендалл в комментариях, вы можете неожиданно вызвать поведение KVO. Более полное обсуждение можно найти в Свойства в dealloc: release, а затем установить nil? или просто отпустите .

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