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
.