viewWillDisappear, viewWillUnload viewDidUnload никогда не вызывается - PullRequest
1 голос
/ 02 апреля 2012

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

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

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

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

РЕДАКТИРОВАТЬ: Угадаю, я неправильно понял @ как события root viewControllerработа (это уникальный статус и т. д.).Посмотрим на методы AppDelegate.Просто пытаюсь убедиться, что мой материал UIDocument сохранен, а также, что мой материал Core Audio закрывается правильно.

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

// из appDelegate

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 02 апреля 2012

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

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

viewWillDisappear:

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

viewDidUnload:

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

0 голосов
/ 02 апреля 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...