Память приложения для iOS и память устройства - PullRequest
0 голосов
/ 21 марта 2012

У меня проблема с приложением 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 все еще существует.

Итак, два вопроса.

  1. Что мне делать с управлением сохранением / выпуском изображений?
  2. Где я должен выпустить VC3, и как я могу быть уверен, что что-то еще не сохранит его, например, NSTimer или что-то.

1 Ответ

0 голосов
/ 22 марта 2012

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

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

...