我正在尝试使用以下代码调整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
,所以我需要尽可能保守记忆。
答案 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;
}
}