Где это утечка?/ Почему у меня проблемы с памятью? - PullRequest
2 голосов
/ 28 марта 2011

У меня проблемы с приложением для iPad, которое я создаю. Существует простая последовательность изображений / анимация из 80 кадров в одной точке.

Код выглядит следующим образом (это подкласс UIView):

- (id)init {
    UIImage *theImage = [UIImage imageNamed:@"chart0075.jpg"];

    // get the frame
    CGRect lgeFrame = CGRectMake(20, 130, theImage.size.width, theImage.size.height);

    // set the new frame
    CGFloat newHeight = theImage.size.height/1.65;
    CGFloat newWidth = theImage.size.width/1.65;

    CGRect smlFrame = CGRectMake(480, 200, newWidth, newHeight);

    self = [super initWithLargeFrame:lgeFrame smallFrame:smlFrame];
    if(self){
        // lets add the image as an image view
        theImageView = [[UIImageView alloc] initWithImage:theImage];
        [theImageView setFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
        [theImageView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
        [self addSubview:theImageView];

        // now we need to make an array of images for the image sequence
        NSMutableArray *imageSeq = [NSMutableArray array];
        for(int i = 1; i < 76; i++){
            NSString *jpgnumber;
            if(i<10){
                jpgnumber = [NSString stringWithFormat:@"000%i",i];
            }
            else {
                jpgnumber = [NSString stringWithFormat:@"00%i",i];
            }
            NSString *imageFile = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"chart%@",jpgnumber] ofType:@"jpg"];
            [imageSeq addObject:[UIImage imageWithContentsOfFile:imageFile]];
        }
        [theImageView setAnimationImages:imageSeq];
        [theImageView setAnimationDuration:1.5];
        [theImageView setAnimationRepeatCount:1];
    }

    return self;
}

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

В чем здесь проблема? 80 jpgs слишком много, чтобы держать в памяти сразу? Их общий размер составляет менее 2 Мб, поэтому они не должны заполнять память ipad, верно?

Я посмотрел на это с помощью инструмента выделения, который предполагает, что у меня есть около 40 КБ памяти во время анимации, но затем это возвращается к 0 во время последующих анимаций. (хотя инструмент распределения действительно немного смущает меня).

Кто-нибудь знает, что это вызывает? Я могу опубликовать больше кода или что-нибудь еще, если необходимо?

Большое спасибо:)

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Использование вашей памяти зависит от того, насколько велики изображения без сжатия. Ширина, умноженная на высоту 4, покажет вам количество байтов, которые будут занимать изображения, умножьте на количество изображений, чтобы получить общее количество.

Полагаю, вы на грани переполненности памяти.

Для уверенности запустите инструменты с помощью инструмента VMTracker. Вы должны смотреть на память Грязного Резидента.

WWDC '10 и WWDC '09 оба имели отличный контент по анализу использования инструментов и памяти.

0 голосов
/ 28 марта 2011

Вы не выпускаете ImageView

[theImageView release]
...