У меня проблема с приложением iOS, когда память, используемая приложением, как показано в разделе «Распределение по инструментам», полностью не соответствует памяти, используемой на самом устройстве. Я вижу предупреждения памяти и сбои, которых я не могу избежать.
Приложение довольно простое по структуре. Три UIViewControllers и UINavigationController. Пользователь начинает с первого VC, который имеет несколько кнопок, переходит ко второму VC, который имеет около 20 миниатюрных изображений, прикрепленных к кнопкам. При нажатии на кнопку пользователь переходит к третьему виртуальному каналу, который имеет несколько изображений с высоким разрешением, обычно PNG размером 900 x 600 пикселей.
Если я запускаю приложение на своем iPod Touch или iPhone 4S, история в разделе «Инструменты / Распределение» будет примерно такой же. Он начинается с размера менее 1 МБ, и после просмотра около 20 изображений с высоким разрешением объем памяти достигает 1,5 МБ, но я начинаю получать предупреждения о памяти, и приложение очень скоро вылетает.
Я проверил в инструменте Утечки, но нет ничего более, что иногда протекает несколько килобайт.
Однако, если я посмотрю на Activity Monitor в Instruments, это совсем другая история. Я вижу, что когда приложение запускается, система выделяет ему около 15 МБ, но по мере того, как я смотрю на все больше и больше изображений, использование продолжает увеличиваться, пока не будет использовано все, что доступно на устройстве, и в этот момент я получаю предупреждения о памяти и приложение происходит сбой, как и Springboard, и устройство возвращается к экрану «слайд, чтобы открыть».
Очевидно, я подозреваю, что изображения сохраняются.
Я использую следующее для создания изображений:
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, который является свойством VC. Я отпускаю его в сделку.
Но похоже, что я делаю это неправильно, поскольку, когда я возвращаюсь в VC2 из VC3, VC3 все еще существует.
Итак, два вопроса.
- Что мне делать с управлением сохранением / выпуском изображений?
- Где я должен выпустить VC3, и как я могу быть уверен, что что-то еще не сохранит его, например, NSTimer или что-то.