Проблема очистки кэша UIImage - PullRequest
0 голосов
/ 21 марта 2011

Мое изображение, загружаемое с сервера данных, занимает много памяти, если изображения увеличиваются, и как только я перехожу на предыдущий экран, используемая память изображений все еще потребляет, даже если я не использую "alloc".И можно ли очистить кеш, если один раз отойти от экрана.Есть ли лучший способ избежать этого?

for (unsigned i = 0 ; i<displayedImages.count; i++) 
    {
        if (![operation isCancelled]) 
        {
            NSLog(@"loadImage %d",i);
            NSString *strURL = [[[imageList objectAtIndex:i] objectForKey:@"URL"] stringByAddingPercentEscapesUsingEncoding:4];
            NSURL *url = [NSURL URLWithString:strURL];
            NSData *imageData = [NSData dataWithContentsOfURL:url];// [[NSData alloc] initWithContentsOfURL:url];
            UIImage *image = [UIImage imageWithData:imageData];// [[UIImage alloc] initWithData:imageData];

            indexForSetImage = i;
            [self performSelectorOnMainThread:@selector(displayImage:) withObject:image waitUntilDone:NO];
        }
    }

Любое предложение с благодарностью.

С уважением,

Sathish

Ответы [ 2 ]

0 голосов
/ 02 января 2012

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

Таким образом, если изображение не отображается, вы не должны указывать ссылку на него. Так, например, есть UIImageView * temp, и вы больше его не отображаете, вы должны сделать это:

temp.image = nil;

Это гарантирует, что вы не придерживаетесь ссылки на него. Также, если вам нужна дополнительная помощь по этому вопросу, посмотрите на this . В него также встроено некоторое кэширование, так что вам не нужно об этом беспокоиться

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

Вам необходимо использовать код Lazy Loading в качестве решения проблемы, возникшей у вас.

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

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

Надеюсь, это поможет вам.

...