UIViewController препятствуют тому, чтобы представление разгрузилось

То, когда мое приложение для iPhone получает память, предупреждающую представления UIViewControllers, которые не в настоящее время видимы, разгружено. В одном конкретном контроллере, разгружающем представление и выходы, является довольно фатальным.

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

Я вижу, что UIViewController имеет метод unloadViewIfReloadable, который называют, когда память, предупреждающая, прибывает. Кто-либо знает, как сказать Касанию Какао, что мое представление не перезагружаемо?

Какие-либо другие предложения, как препятствовать тому, чтобы мое представление было разгружено на памяти, предупреждающей?

Заранее спасибо


В документах Apple о жизненном цикле представления контроллера представления говорится:

didReceiveMemoryWarning - Реализация по умолчанию выпускает представление, только если это решает, что безопасно сделать так

Теперь... Я переопределяю didReceiveMemoryWarning с пустой функцией, которая просто называет NSLog для сообщения мне предупреждения, был получен. Однако - представление разгружено так или иначе. Плюс, на том, какие критерии точно решены, безопасно ли представление разгрузить..., о! столько вопросов!

16
задан Marin Todorov 3 October 2012 в 10:16
поделиться

2 ответа

Согласно документации, реализация по умолчанию didReceiveMemoryWarning: освобождает представление, если это безопасно ( то есть: superview == nil).

Чтобы предотвратить выпуск представления, вы можете переопределить didReceiveMemoryWarning: но в вашей реализации не вызывайте [super didReceiveMemoryWarning] . Вот где представление освобождается по умолчанию (если не отображается).

По умолчанию didReceiveMemoryWarning освобождает представление, вызывая [viewcontroller setView: nil] , чтобы вы могли переопределить это вместо этого.

15
ответ дан 30 November 2019 в 17:38
поделиться

Может ли это быть так просто?

Несмотря на то, что нигде в документации это не упоминается, кажется, что если я сохраняю вид исключительно в viewDidLoad, то он не освобождается при предупреждении Memory Warning. Я пробовал с несколькими последовательными предупреждениями в симуляторе, и все по-прежнему выглядит хорошо.

Итак... на данный момент трюк заключается в "сохранении" в viewDidLoad и освобождении в dealloc - таким образом, viewcontroller "застревает" с представлением до того момента, когда его нужно освободить.

Я протестирую еще немного и напишу о результатах

.
1
ответ дан 30 November 2019 в 17:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: