viewWillDisappear, viewWillUnload viewDidUnload никогда не вызывался

Методы моего корневого viewController viewWillDisappear, viewWillUnload viewDidUnload никогда не вызываются (в каждом есть операторы журнала).

Кажется, это уже поднималось здесь, но ответы не совсем ясны. Это, кажется, подразумевает, что представление viewController должно быть встроено в UINavigationController, что кажется странным и не упоминается где-либо еще.

viewWillDisappear и viewDidDisappear никогда не вызываются

Если это так, где еще я могу сделать некоторую очистку и убедиться, что мои изменения UIDocument будут сохранены?

EDIT: Думаю, я неправильно понял @, как работают события root viewController (это уникальный статус и т. д.). Рассмотрю методы AppDelegate. Просто пытаюсь убедиться, что мой материал UIDocument сохраняется, а также, что мой материал Core Audio закрывается правильно.

Закрытие: завершение работы с уведомлениями, отправленными AppDelegate. Кажется, работает довольно хорошо + простые вещи после того, как вы сделаете это один раз.

// из appDelegate

- (void)applicationDidEnterBackground:(UIApplication *)application
{

[[NSNotificationCenter defaultCenter] postNotificationName: @"handleCleanup" 
                                                    object: nil 
                                                  userInfo: nil];
}

и мой ВК регистрируется на уведомление:

    [[NSNotificationCenter defaultCenter] addObserver: self 
                                         selector: @selector(saveAndCleanup) 
                                             name: @"handleCleanup" 
                                           object: nil];

person spring    schedule 02.04.2012    source источник


Ответы (2)


Если это ваше корневое представление, и вы никогда его не меняете, то оно не исчезнет. Хотя viewWillDisapear может вызываться, когда вы переводите свое приложение в фоновый режим - я не могу вспомнить.

Ваш контроллер просмотра будет выгружен только в том случае, если вы получите предупреждение о памяти, но если он на экране - он не будет выгружен.

viewWillDisappear:

Этот метод вызывается в ответ на удаление представления из иерархии представлений. Этот метод вызывается перед фактическим удалением представления и перед настройкой любых анимаций.

viewDidUnload:

Когда возникает состояние нехватки памяти и представления текущего контроллера представления не нужны, система может выбрать удаление этих представлений из памяти. Этот метод вызывается после того, как представление контроллера представления было освобождено, и это ваш шанс выполнить окончательную очистку. Если ваш контроллер представления хранит отдельные ссылки на представление или его подпредставления, вы должны использовать этот метод для освобождения этих ссылок. Вы также можете использовать этот метод для удаления ссылок на любые объекты, которые вы создали для поддержки представления, но которые больше не нужны после того, как представление исчезло. Вы не должны использовать этот метод для раскрытия пользовательских данных или любой другой информации, которую нельзя легко воссоздать.

person bandejapaisa    schedule 02.04.2012
comment
дох! В этом есть смысл. Я тестирую в Симуляторе и ожидал, что эти события просмотра сработают. Похоже, что AppDelegate — правильное место для моей очистки. - person spring; 02.04.2012

Типичным местом для освобождения ненужного кеша или ресурсов является - (void)didReceiveMemoryWarning. Если вы этого не сделали в этом методе, iOS может убить ваше приложение, когда ему не хватает памяти.

Учитывая природу мобильных приложений, вы должны сохранять как можно чаще. Типичная реализация использует таймер для автоматического сохранения. Иногда поступает вызов, и iOS может решить убить ваше приложение вместо того, чтобы переводить его в фоновый режим, потому что вы используете много памяти.

С другой стороны, когда вызывается - (void)didReceiveMemoryWarning, ваше представление обязательно будет выгружено. Это, однако, не означает, что приложение будет убито. Это означает, что при следующем открытии приложения viewDidLoad будет вызываться снова. В этом смысле вы можете попробовать сохранить файл этим методом.

person He Shiming    schedule 02.04.2012