Я делаю интерактивную книгу для iPad и использую UINavigationController
для реализации навигации между страницей и следующей. Когда пользователь переворачивает страницу, следующая страница перемещается поверх стека навигации.
Сейчас я на 15 страницах в приложении, и приложение вылетает, когда я пытаюсь перейти со страницы 14 на страницу 15. Нет сообщения об ошибке в консоли, ничего в журналах сбоев устройства также нет.
Каждая сцена контроллера представления в раскадровке имеет UIImageViews
отображающих изображения размером от 5 МБ до 20 МБ. Метод viewDidLoad
контроллеров представления вызывается только один раз. Общий размер всех активов приложения составляет менее 200 млрд. Я использую АРК.
Я запустил приложение с помощью монитора памяти Instruments. Реальное потребление памяти приложением увеличивается примерно на 80 МБ каждый раз, когда переворачивается новая страница, и происходит сбой, когда оно достигает 800 МБ (устройство — iPad 3).
Почему такое огромное потребление памяти? Это потому, что UIImageView в сценах раскадровки кэширует изображения?
Как лучше всего освободить память при использовании
UINavigationController
и ARC?
Я попытался добавить настройку всех подпредставлений контроллера представления на nil в методе viewDidDisappear:
контроллеров представления, но потребление памяти осталось прежним.