Предотвратить выделение UIWebView большого объема памяти - PullRequest
1 голос
/ 25 августа 2011

У меня проблема с UIWebView. Я использую этот компонент для загрузки обычных веб-страниц на iPad / iPhone. UIWebView представлен в modalViewController. Некоторые страницы очень требовательны к памяти, а некоторые также содержат Flash.

Проблема в том, что иногда на некоторых страницах появляется предупреждение о памяти

Received memory warning. Level=1

Когда это происходит, и когда я закрываю этот modalViewController (в который загружена страница в webView), предыдущее представление автоматически перезагружается - метод viewDidLoad запускается снова.

Я подозреваю, что некоторые страницы в UIWebView занимают много памяти, а затем приложение освобождает память своих представлений, но не вылетает.

Есть ли способ ограничить потребление памяти webView или есть другой способ избежать этого предупреждения о памяти?

Спасибо!

1 Ответ

3 голосов
/ 25 августа 2011

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

Единственное, что вы можете сделать, чтобы ограничить использование памяти UIWebView, - это просматривать простые веб-страницы.Как видно из вашего вопроса, это не вариант.

Редактировать: viewDidUnload вызывается при нехватке памяти.Ожидается, что этот метод освободит все, что легко воссоздать в методе viewDidLoad.Не раскрывайте информацию о состоянии, которую вы хотите показать пользователю, когда это представление возвращается на экран.Затем в вашем методе viewDidLoad проверьте все объекты, которые вы создаете.Если они nil, их нужно инициализировать, в противном случае это не первый раз, когда вызывается ваш метод viewDidLoad, и вам не следует инициализировать свои объекты еще раз.

Другими словами: viewDidUnload обрабатывает ситуации с нехваткой памяти, и viewDidLoad не следует предполагать, что он запускается один раз.

...