Загрузка большого количества изображений с последующим отображением в маленьких UIImageViews в приложении для iPhone.Нужно ли изменять размер, чтобы сохранить память? - PullRequest
0 голосов
/ 13 марта 2011

Я работаю над приложением, которое загружает серию изображений с веб-сервера и отображает их в приложении. Изображения размером около 615x725 с сервера, но будут отображаться только около 200x230 в приложении. Использование памяти в моем приложении сейчас очень высоко, и я получаю регулярные предупреждения о памяти. Они загружаются через этот набор вызовов:

Синхронный запрос ASIHTTPRequest (в фоновом потоке GCD) к NSData

[UIImage imageWithData:...]

[image forceLoad] (see below)

[UIImageView initWithImage:...]

[imageview setFrame:...]

Нужно ли мне делать что-то большее, чтобы убедиться, что моя память не перегружена излишне большими данными UIImage? Или UIImageView справится с этим для меня?

Метод принудительной нагрузки:

- (void) forceLoad{
    const CGImageRef cgImage = [self CGImage];  

    const int width = CGImageGetWidth(cgImage);
    const int height = CGImageGetHeight(cgImage);

    const CGColorSpaceRef colorspace = CGImageGetColorSpace(cgImage);
    const CGContextRef context = CGBitmapContextCreate(
                                                   NULL, /* Where to store the data. NULL = don’t care */
                                                   width, height, /* width & height */
                                                   8, width * 4, /* bits per component, bytes per row */
                                                   colorspace, kCGImageAlphaNoneSkipFirst);

    CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgImage);
    CGContextRelease(context);

}

1 Ответ

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

Вы можете изменить размер и изображение следующим образом, надеюсь, это поможет

UIImage *newImage;
UIImage *olDImage = [UIImage imageWithData:imageData] ;
UIGraphicsBeginImageContext(CGSizeMake(200,230)); 
[olDImage drawInRect:CGRectMake(0, 0,200,230)];
newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext();
...