下载大量大图像,然后在iPhone应用程序中的小UIImageViews中显示。我需要调整大小以节省内存吗?

时间:2011-03-13 14:41:39

标签: iphone memory-management uiimageview uiimage

我正在开发一个应用程序,它从Web服务器下载一系列图像并在应用程序中显示它们。图像大约是615x725来自服务器,但只会在应用程序中以大约200x230显示。我的应用程序中的内存使用率现在非常高,我正在定期收到内存警告。它们是通过这组电话下载的:

同步ASIHTTPRequest(在GCD后台线程中)到NSData

[UIImage imageWithData:...]

[image forceLoad] (see below)

[UIImageView initWithImage:...]

[imageview setFrame:...]

我是否还需要做更多工作以确保我的内存不会被不必要的大UIImage数据所困扰?或者UIImageView会为我处理这个吗?

forceload方法:

- (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 :(得分:0)

您可以按如下方式调整大小和图像,希望有所帮助

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