Использование памяти iPad постоянно увеличивается - PullRequest
2 голосов
/ 25 января 2011

Я пишу приложение для iPad, которое использует много видео и большие последовательности анимации PNG, заботясь о том, чтобы освободить все ресурсы, когда они больше не нужны.Инструменты не показывают утечек памяти, а выделения показывают, что приложение никогда не выделяет более 30 МБ.Однако, когда я смотрю на Activity Monitor, я вижу, что реальная память и виртуальная память постоянно увеличиваются, чем больше копается в контенте приложения.Я помещаю NSLogs во все мои методы dealloc, и каждый объект, который я выпускаю, освобождается.Мое приложение, однако, убивается с сигналом 0. У кого-нибудь есть какие-либо предложения?

Ответы [ 3 ]

2 голосов
/ 26 января 2011

Может быть, у вас есть NSZombieEnabled?Случилось со мной один раз ...

2 голосов
/ 25 января 2011

Возможно, вы уже делаете это, но при использовании инструмента «Распределения» при съемке пользовательского интерфейса возьмите «Кучу выстрелов».Это даст вам представление о том, что распределяется в каждом интервале и жизненном цикле объекта.У Билла Бумгарнера есть отличная запись в блоге об этом мощном инструменте, который стоит прочитать.

0 голосов
/ 17 мая 2012

Видео сеанса WWDC 2011 318 «Производительность iOS в глубину» (около 43 минут 50 секунд) описывает, как анимация UIImage в UIImageView может использовать много памяти. Они предлагают при анимации больших изображений с использованием

- (void) animateImages
{
   CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateImage:)];
}

- (void) animateImage:(CADisplayLink *)link
{
   [imageView setImage:[UIImage imageWithContentsOfFile:nextImagePath()]];
}

Скорость анимации не гарантируется. Использование + [UIImage imageWithContentsOfFile:] является ключевым, поскольку + [UIImage imageNamed:] будет кэшировать экземпляры изображений.

Я использовал эту технику в своем приложении, в которой не хватало памяти, переключаясь между наборами анимации больших изображений, и все отлично работает на iPhone 3GS и iPhone 4S. Это медленно на iPhone 3GS, но 3GS не мог даже сделать один набор анимаций раньше. Глядя на статистику Dirty Size в VM Tracker, разница огромна.

...