Как бороться с предупреждениями о нехватке памяти на iPhone? - PullRequest
4 голосов
/ 01 декабря 2008

У меня проблемы с тем, что мое приложение получает предупреждения о нехватке памяти, когда пользователь находится глубоко в стеке представлений контроллера навигации. После того, как пользователь просматривает набор иерархических опций в последующих UITableView, он может открыть документ PDF в UIWebView (в другом контроллере представления).

Все отлично работает, PDF загружается, и пользователь может пролистывать страницы. Однако, когда документ немного велик или имеет несколько страниц, и пользователь нажимает кнопку «Назад» в контроллере навигации, он завершает работу приложения, поскольку предыдущий контроллер представления в стеке контроллера навигации был освобожден.

Обыскав способы борьбы с предупреждениями о нехватке памяти и решив проблему такого типа, я нашел несколько постов, в которых людям просто советуют освобождать объекты, которые могут быть освобождены, а затем загружать их позже, когда пользователь пытается загрузить представление, которое было освобождено. Один из этих постов - «1005 *» Крейга Хокенберри, посвященный потере памяти: очистка поста.

Хотя это немного полезно, это не дает мне много информации для работы.

Может ли кто-нибудь предоставить простое руководство о том, как бороться с предупреждениями о нехватке памяти и как реализовать «отложенную загрузку» объектов?

Ответы [ 2 ]

5 голосов
/ 01 декабря 2008

Когда памяти мало, система отправляет серию сообщений, связанных с памятью. Любые созданные экземпляры контроллеров представления получат сообщение -didReceiveMemoryWarning. Если вы не реализуете это, действие по умолчанию (при условии, что контроллер представления не является передним) состоит в том, чтобы освободить элемент представления контроллера. Если у вас есть зацепки или, возможно, его подпредставления, это может вызвать проблемы, когда ваш контроллер вернется на вершину стека.

2 голосов
/ 01 декабря 2008

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

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

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