Зачем вам устанавливать значение nil И освобождать свойство UIViewController? - PullRequest
2 голосов
/ 20 апреля 2011

Что-то, чего я не вижу в документации Apple.Вот выдержка из - (void) viewDidUnload класса UIViewController:

ваш метод dealloc должен освободить каждый объект, но также должен установить ссылку на этот объект на ноль перед вызовом super.

Если вы используете retain и synthetize для атрибута xxx в своем коде, почему большинство примеров Apple делают set-to-nil в viewDidUnload:

self.xxx = nil;

, но рекомендует сделатьи set-to-nil И выпуск в dealloc:

[xxx release];
self.xxx = nil;

Почему set-to-nil недостаточно для dealloc?

ps: я знаю, что мой вопросочень похоже на это «Зачем освобождать свойство, для которого вы уже установили nil?» , но это не совсем то же самое

1 Ответ

4 голосов
/ 20 апреля 2011
[xxx release];
self.xxx = nil;

Это неверно, так как xxx будет выпущен дважды, рекомендуемый способ - выпустить iVar и установить его равным nil, не используя свойство:

[xxx release];
xxx = nil;

Причина не просто использования

self.xxx = nil;

заключается в том, что вызывающий метод setter может иметь некоторые побочные эффекты, которые могут вызвать проблемы в методе dealloc (то есть использовать другой iVar, который уже может быть освобожден)

...