ViewDidUnload больше не вызывается в ios6

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

В яблочном документе

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

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

- (void)viewDidUnload {
    [super viewDidUnload];

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

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

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

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

Ответ 1

Для первого вопроса:

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

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

Отвечайте на второй.

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

Ответ 2

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

@property (weak) IBOutlet UILabel * labelText;

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

Ответ 3

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

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

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