viewDidUnload уже не в iOS6

Я только что установил новую версию Xcode / ios6. viewDidUnload теперь амортизируется.

в Apple doc,

viewDidUnload [...] Осуждаемый в iOS 6.0. Представления больше не очищаются в условиях нехватки памяти, поэтому этот метод никогда не вызывается.

но количество приложений используют этот обратный вызов, чтобы освободить свои свойства, как:

- (void)viewDidUnload {
    [super viewDidUnload];

    self.recipientButton = nil;
    self.connectButton = nil;
    self.infoLabel = nil;
}

Это была лучшая практика, чтобы освободить свой IBOutlets.

Итак, первый вопрос:
Что произойдет с этими существующими приложениями в iOS 6? Они просочатся ?

и второе:
Каков новый рекомендуемый способ освобождения свойства IBOutlet ? В метод dealloc ?

3 ответов


первый вопрос:

ваш ViewController получит обратный вызов метода didReceiveMemoryWarning, и вы можете обнулить представление и другие компоненты в этом методе

Для справки Проверьте видеосессию WWDC 2012 на EVOLUTION of VIEW CONTROLLER, если вы этого не сделали (я считаю, что они доступны только для зарегистрированных разработчиков, но не уверены).

ответьте на свой второй.

[освобождение объекта]; в dealloc. Нет необходимости назначать nil объект перед выпуском.


Я рекомендую вам использовать слабое свойство для IBOutlets, таких как

@property (weak) IBOutlet UILabel * labelText;

таким образом, вам не нужно ничего делать в dealloc. В iOS 6 просто ViewDidUnload не будет вызывать, iOS5 или ранее это просто вызов, когда происходит предупреждение памяти.


и второй: каков новый рекомендуемый способ выпуска IBOutlet собственность ? В метод dealloc ?

что такое "старый" рекомендуемый способ? Вы всегда должны освобождать сохраненные переменные экземпляра в dealloc; Он всегда был таким и продолжает быть.

только в viewDidUnload (который вызывается только для низкой памяти) вы могли бы и настройки к nil.