У меня проблема с приложением iOS, где память, используемая приложением, как показано в Allocations on Instruments, полностью не соответствует той памяти, которая используется на самом устройстве. Я вижу предупреждения о памяти и сбои, которых я не могу избежать.Память приложений iOS и память устройства
Приложение довольно прост по структуре. Три UIViewControllers и UINavigationController. Пользователь начинает с первого VC, который имеет несколько кнопок, переходит к второму VC, который содержит около 20 миниатюр, прикрепленных к кнопкам. При нажатии на кнопку пользователь переходит к третьему VC, который имеет несколько изображений с высоким разрешением, как правило, с разрешением 900 x 600 пикселей PNG.
Если я запустил приложение на своем iPod Touch или моем iPhone 4S, рассказ в «Инструменты/Распределение» почти такой же. Он начинается чуть ниже 1 Мбайт и после просмотра примерно 20 изображений с высоким разрешением, память составляет около 1,5 МБ, но я начинаю получать предупреждения о памяти, и приложение очень быстро падает.
Я проверил инструмент «Утечки», но нет ничего больше, чем несколько kB, возникающих изредка.
Однако, если я посмотрю на Монитор активности в Инструментах, это совершенно другая история. Я вижу, что при запуске приложения система выделяет около 15 МБ, но когда я смотрю на все больше и больше изображений, использование продолжает увеличиваться, пока оно не использует все, что доступно устройству, после чего я получаю предупреждения о памяти и приложение сбои, как и Springboard, и устройство возвращается к экрану «slide to open».
Очевидно, мое подозрение в том, что изображения сохраняются.
Я использую следующие действия для создания изображения:
layer1 = [[UIImageView alloc] initWithFrame:myCGRect];
UIImage *img1 = [[UIImage alloc]initWithContentsOfFile:imgName];
layer1.image = img1;
layer1.opaque = YES;
[self.view addSubview:layer1];
[img1 release];
img1 = nil;
layer1 является UIImageView, что это свойство ВК. Я освобождаю его в dealloc.
Но похоже, что я делаю это неправильно, так как, когда я возвращаюсь в VC2 из VC3, VC3 все еще существует.
Так что два вопроса.
- Что мне делать с управлением сохранением/выпуском изображений?
- Где я могу освободить VC3, и как я могу быть уверен, что что-то еще не сохранит его, например. NSTimer или что-то в этом роде.