Мой предыдущий ответ по этому вопросу обсуждает, что Apple рекомендует и почему.Соответствующие части воспроизведены здесь для ясности:
Кроме того, из Apple Docs на -viewDidUnload
:
Предпочтительный способ отказаться от владения любым объектом (включаяв выходах) - использовать соответствующий метод доступа для установки значения объекта равным nil.Однако, если у вас нет метода доступа для данного объекта, вам, возможно, придется явно освободить объект
Итак, поехали.Если у вашей торговой точки есть свойство, связанное с ней (что все они должны больше), то обнулите его в -viewDidUnload
- но не отпускайте его.Это имеет смысл, если учесть, что на самом деле происходит в синтезированном методе доступа;код выглядит примерно так:
- (void) setMyView1 : (UIView *) view {
if (myView1) // the associated IVAR is already set
[myView1 release];
myView1 = [view retain];
}
Как видите, установка свойства синтеза на nil неявно освобождает сохраненный объект.
Также из документов по -dealloc
:
Если вы реализуете этот метод, но создаете свое приложение для iOS 2.x, ваш метод dealloc должен освободить каждый объект, но также должен установить ссылку на этот объект на nil перед вызовом super.
Если вы не поддерживаете iOS2.x, нет необходимости устанавливать нулевые объекты в dealloc.
Итак, для суммирования документов Apple по -viewDidUnload
и -dealloc
:
- В
-viewDidUnload
нулевые свойства (включая свойства IBOutlet), но не освобождают их - В
-dealloc
свойства выпуска,но не ноль их (если не строить для 2.x).