2012-03-21 3 views
0

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

Так что два вопроса.

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

ответ

0

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

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

Смежные вопросы