iOS - 调整图像大小会导致内存泄漏

时间:2014-03-30 08:36:45

标签: ios iphone objective-c uiimage

我正在尝试使用以下代码调整UIImage循环内的多个for对象:

CGFloat scaledToWidth:resized_width = 160.0;
for(UIImage *img in imageArray) {
    UIImage *resizedImageSecond = [self resizeImage:img scaledToWidth:resized_width]; 
    //Do something with resizedImageSecond      
}

-(UIImage*)resizeImage:(UIImage*) sourceImage scaledToWidth: (float) i_width
{
    float oldWidth = sourceImage.size.width;
    float scaleFactor = i_width / oldWidth;

    float newHeight = sourceImage.size.height * scaleFactor;
    float newWidth = oldWidth * scaleFactor;

    UIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight));
    [sourceImage drawInRect:CGRectMake(0, 0, newWidth, newHeight)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();
    return newImage;
}

但是我看到我的内存使用率在resizeImage:scaledToWidth:的每次迭代中都会迅速增加。我不会在这里看到任何明显的记忆泄漏,但我也不确定。

有没有人看到为什么我的内存使用会增加此功能?我在这里不知所措。不幸的是,我UIImage内约有imageArray,所以我需要尽可能保守记忆。

1 个答案:

答案 0 :(得分:1)

您在UIImage的每次使用时都会创建新的resizeImage:scaledToWidth:实例。这是记忆力增加的原因。最简单的解决方案是在不再需要时将图像设置为nil

for(UIImage *img in imageArray) {
    @autoreleasepool {
        UIImage *resizedImage = [self resizeImage:img scaledToWidth:resized_width]; 

        //Do something with resizedImage 

        resizedImage = nil;
    }     
}