В iOS 6, viewWillUnload
и viewDidUnload
устарели, а UIViewControllers больше не выгружают представления, которые не отображаются на экране во время предупреждения о памяти. В руководстве View Programmingler Programming Guide приведен пример того, как вручную восстановить это поведение.
Вот пример кода:
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Add code to clean up any of your own resources that are no longer necessary.
if ([self.view window] == nil)
{
// Add code to preserve data stored in the views that might be
// needed later.
// Add code to clean up other strong references to the view in
// the view hierarchy.
self.view = nil;
}
}
Ниже образца кода следует отметить следующее:
При следующем доступе к виду свойства вид перезагружается точно так же, как это было в первый раз.
Здесь есть очевидный недостаток. Если контроллер просмотра, который не загрузил его представление, получает предупреждение о сохранении памяти, он загрузит его вид в строке if ([self.view window] == nil)
, а затем продолжит очистку и отпустите его снова. В лучшем случае это неэффективно. В худшем случае это ухудшает условия памяти, если загружена сложная иерархия представлений и поддерживающие данные. Я проверил это поведение в симуляторе iOS.
Я могу, конечно, кодировать вокруг этого, но кажется, что для документов Apple есть странная ошибка. Я что-то пропустил?