Интеллектуальный контроллер с открытым исходным кодом iOS, push / pop lib для uinavigationcontroller?

#ios #objective-c #uinavigationcontroller

#iOS #objective-c #uinavigationcontroller

Вопрос:

У меня есть приложение, в котором пользователь может бесконечно углубляться в представления (нажимая на навигационный стек). В какой-то момент появится предупреждение о памяти. Я хотел бы удалить контроллеры просмотра из контроллера навигации и освободить их. Если пользователь вернется к этим контроллерам представления, я бы хотел воссоздать контроллеры представления и вернуть их в правильное положение в стеке.

Правильно ли думать об этой проблеме?

Есть ли проект с открытым исходным кодом, который делает это? Это не кажется необычной проблемой, и я бы предпочел не изобретать велосипед.

Ответ №1:

Было время, когда вам нужно было убедиться, что вызовы viewDidLoad и viewDidUnload совпадают должным образом, чтобы предупреждения памяти могли обрабатываться таким образом. Начиная с iOS 6, в этом больше нет необходимости.

Как сказано в документации для viewDidUnload :

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

В iOS 6 и более поздних версиях очистка ссылок на представления и другие объекты в вашем контроллере представления не требуется.

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