Примечание. Этот вопрос устарел - viewDidUnload
устарел iOS 6.
Когда автоматически вызывается UIViewController viewDidUnload? Да, я знаю, когда просмотр выгружается. Но когда это происходит автоматически? Как я могу сделать это вручную? Спасибо.
Примечание. Этот вопрос устарел - viewDidUnload
устарел iOS 6.
Когда автоматически вызывается UIViewController viewDidUnload? Да, я знаю, когда просмотр выгружается. Но когда это происходит автоматически? Как я могу сделать это вручную? Спасибо.
Если вы выдаете предупреждение памяти в симуляторе (смотрите в меню), это вызовет вызов для любого контроллера вида, прикрепленного к виду, которое не видно.
Это потому, что контроллеры представления по умолчанию зарегистрированы для уведомлений о предупреждении памяти, и любое представление, которое в настоящее время не используется, будет выгружено контроллером представления - существует метод viewDidUnload, чтобы вы могли очистить все, что захотите, для сохранения дополнительной памяти (или если вы сохранили некоторые IBOutlets, чтобы освободить память, которая в противном случае была бы выпущена при разгрузке представления).
Как правило, любые IBOutlets, которые вы выпускаете в dealloc, также должны быть освобождены (и ссылки установлены на ноль) в этом методе.
В дополнение к ручному выдаче предупреждения о памяти в симуляторе вы можете запрограммировать один раз с помощью
- (void)_simulateLowMemoryWarning {
// Send out MemoryWarningNotification
[[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidReceiveMemoryWarningNotification
object:[UIApplication sharedApplication]];
// Manually call applicationDidReceiveMemoryWarning
[[[UIApplication sharedApplication] delegate] applicationDidReceiveMemoryWarning:[UIApplication sharedApplication]];
}
Затем вы можете вызвать это каждые 5 секунд, используя таймер
static NSTimer *gLowMemoryTimer = nil;
- (void)stopLowMemoryTimer {
[gLowMemoryTimer invalidate];
gLowMemoryTimer = nil;
}
- (void)startLowMemoryTimer {
if (gLowMemoryTimer) {
[self _stopLowMemoryTimer];
}
gLowMemoryTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(_simulateLowMemoryWarning) userInfo:nil repeats:YES];
}
-viewDidUnload
вызывается всякий раз, когда свойство представления viewcontroller установлено равным nil, либо вручную, либо чаще всего через didReceiveMemoryWarning:
.
iOS 6.x и более поздние версии
Я знаю, что это более старый вопрос, но я чувствую, что должен быть представлен ответ относительно изменений API viewDidUnload
в iOS 6, а именно, что в iOS 6 viewDidUnload
больше не вызывается (вообще) и осуждается.
viewDidUnload вызывается в условиях низкой памяти. Мы должны выгрузить материал, который мы загрузили в методе viewDidLoad. Нам нужно отказаться от права собственности на объект, вызвав метод доступа, чтобы установить его на нуль. В случае выхода, объект освобождается, поэтому ссылка на объект может быть безопасно установлена на нуль. Если не синтезированное свойство, тогда нам сначала нужно освободить объект, чем мы установили в nil.