То, когда мое приложение для iPhone получает память, предупреждающую представления UIViewControllers, которые не в настоящее время видимы, разгружено. В одном конкретном контроллере, разгружающем представление и выходы, является довольно фатальным.
Я ищу способ препятствовать тому, чтобы это представление было разгружено. Я нахожу это поведение довольно глупым - у меня есть механизм кэширования, поэтому когда память, предупреждающая, прибывает - я разгружаю меня тонны данных, и я освобождаю достаточно памяти, но мне определенно нужно это нетронутое представление.
Я вижу, что UIViewController имеет метод unloadViewIfReloadable
, который называют, когда память, предупреждающая, прибывает. Кто-либо знает, как сказать Касанию Какао, что мое представление не перезагружаемо?
Какие-либо другие предложения, как препятствовать тому, чтобы мое представление было разгружено на памяти, предупреждающей?
Заранее спасибо
В документах Apple о жизненном цикле представления контроллера представления говорится:
didReceiveMemoryWarning - Реализация по умолчанию выпускает представление, только если это решает, что безопасно сделать так
Теперь... Я переопределяю didReceiveMemoryWarning
с пустой функцией, которая просто называет NSLog для сообщения мне предупреждения, был получен. Однако - представление разгружено так или иначе. Плюс, на том, какие критерии точно решены, безопасно ли представление разгрузить..., о! столько вопросов!
Согласно документации, реализация по умолчанию didReceiveMemoryWarning: освобождает представление, если это безопасно ( то есть: superview == nil).
Чтобы предотвратить выпуск представления, вы можете переопределить didReceiveMemoryWarning: но в вашей реализации не вызывайте [super didReceiveMemoryWarning]
. Вот где представление освобождается по умолчанию (если не отображается).
По умолчанию didReceiveMemoryWarning освобождает представление, вызывая [viewcontroller setView: nil]
, чтобы вы могли переопределить это вместо этого.
Может ли это быть так просто?
Несмотря на то, что нигде в документации это не упоминается, кажется, что если я сохраняю вид исключительно в viewDidLoad, то он не освобождается при предупреждении Memory Warning. Я пробовал с несколькими последовательными предупреждениями в симуляторе, и все по-прежнему выглядит хорошо.
Итак... на данный момент трюк заключается в "сохранении" в viewDidLoad и освобождении в dealloc - таким образом, viewcontroller "застревает" с представлением до того момента, когда его нужно освободить.
Я протестирую еще немного и напишу о результатах
.