Подтвердить что ты не робот

Когда называется UIViewController viewDidUnload?

Примечание. Этот вопрос устарел - viewDidUnload устарел iOS 6.

Когда автоматически вызывается UIViewController viewDidUnload? Да, я знаю, когда просмотр выгружается. Но когда это происходит автоматически? Как я могу сделать это вручную? Спасибо.

4b9b3361

Ответ 1

Если вы выдаете предупреждение памяти в симуляторе (смотрите в меню), это вызовет вызов для любого контроллера вида, прикрепленного к виду, которое не видно.

Это потому, что контроллеры представления по умолчанию зарегистрированы для уведомлений о предупреждении памяти, и любое представление, которое в настоящее время не используется, будет выгружено контроллером представления - существует метод viewDidUnload, чтобы вы могли очистить все, что захотите, для сохранения дополнительной памяти (или если вы сохранили некоторые IBOutlets, чтобы освободить память, которая в противном случае была бы выпущена при разгрузке представления).

Как правило, любые IBOutlets, которые вы выпускаете в dealloc, также должны быть освобождены (и ссылки установлены на ноль) в этом методе.

Ответ 2

В дополнение к ручному выдаче предупреждения о памяти в симуляторе вы можете запрограммировать один раз с помощью

- (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];
}

Ответ 3

-viewDidUnload вызывается всякий раз, когда свойство представления viewcontroller установлено равным nil, либо вручную, либо чаще всего через didReceiveMemoryWarning:.

Ответ 4

iOS 6.x и более поздние версии

Я знаю, что это более старый вопрос, но я чувствую, что должен быть представлен ответ относительно изменений API viewDidUnload в iOS 6, а именно, что в iOS 6 viewDidUnload больше не вызывается (вообще) и осуждается.

Ответ 5

viewDidUnload вызывается в условиях низкой памяти. Мы должны выгрузить материал, который мы загрузили в методе viewDidLoad. Нам нужно отказаться от права собственности на объект, вызвав метод доступа, чтобы установить его на нуль. В случае выхода, объект освобождается, поэтому ссылка на объект может быть безопасно установлена ​​на нуль. Если не синтезированное свойство, тогда нам сначала нужно освободить объект, чем мы установили в nil.