Управление памятью при загрузке изображений - PullRequest
0 голосов
/ 13 июня 2011

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

animImage является UIImageView;

Вот как этоработает:

- (IBAction) panAnim:(UIPanGestureRecognizer *)sender{
    CGPoint translate = [sender translationInView:sliderView];

    if (translate.x >= lastPoint) {
        difference = translate.x - lastPoint;
        [self forwardAnim:difference];
    } else {
        difference = lastPoint - translate.x;
        [self backwardAnim:difference];
    }
    lastPoint = translate.x;
}

-(void)forwardAnim:(CGFloat)speed{
    NSInteger newFrame = currentFrame+speed;
    currentFrame = newFrame;
    if (currentFrame>=totalFrames) {
        currentFrame=0;
    }
    NSString *newImagePath = [NSString stringWithFormat:@"%@", [currentAnimation objectAtIndex:currentFrame]];  
    animImage.image = [UIImage imageNamed:newImagePath];
}

-(void)backwardAnim:(CGFloat)speed{
    NSInteger newFrame = currentFrame-speed;
    currentFrame = newFrame;
    if (currentFrame<0) {
        currentFrame=(totalFrames-1);
    }
    NSString *newImagePath = [NSString stringWithFormat:@"%@", [currentAnimation objectAtIndex:currentFrame]];  
    animImage.image = [UIImage imageNamed:newImagePath];
}

Анимация определяет положение перевода и вычисляет, в каком «кадре» должна быть анимация, а затем меняет изображение.

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

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

Спасибо за вашу помощь!

Приветствия, D

1 Ответ

1 голос
/ 27 июня 2011

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

Предупреждение о памяти не означает, что сбой неизбежен.Было бы полезно, если бы вы опубликовали детали аварии.Глядя на журнал сбоев, вы сможете определить строку в своем коде, которая приводит к сбою - это может быть несколько кадров от вершины стека.Найдите эту строку, поставьте точку останова на одну или две строки перед ней и пошагово просматривайте код, представляющий, что может произойти в каждой строке, которая может вызвать проблему - неудачное выделение, неверное значение и т. Д.Файлы изображений размером 25 КБ, вероятно, расширяются до чего-то гораздо большего в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...