【发布时间】:2014-07-12 16:22:05
【问题描述】:
我从 StackOverflow 上的答案中挑选了以下代码:
+ (UIImage *)resizeImage:(UIImage *)image toSize:(CGSize)newSize;
{
// UIGraphicsBeginImageContext(newSize);
// In next line, pass 0.0 to use the current device's pixel scaling factor (and thus account for Retina resolution).
// Pass 1.0 to force exact pixel size.
UIGraphicsBeginImageContextWithOptions(newSize, NO, 1.0);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
我将其用作UIImage 类型的类别。我正在使用以下方法对其进行分析:
+ (void)testResize:(UIImage *)image
{
clock_t start = clock();
int times = 50;
for (int i = 0; i < 50; i++) {
// resize photo
UIImage *resizedImage = [UIImage resizeImageToOptimalSize:image];
resizedImage = nil;
}
double diff = (double)clock()-start;
printf("testResize = %f\n", diff * 1000/times/CLOCKS_PER_SEC);
}
如果我修改上面的代码并只转储resizeImageToOptimalSize 调用 50 次也没关系,我看到分析器发疯了。这是resizeImageToOptimalSize 代码,以防你怀疑我在这里犯了错误:
+ (UIImage *)resizeImageToOptimalSize:(UIImage *)image
{
CGSize newSize = CGSizeMake(..., ...);
return [self resizeImage:image toSize:newSize];
}
当方法完成时,内存使用量会增加并上升,然后下降到 ~ 1.5MB。这是仪器截图:
仪器工具本身没有泄漏,但我不相信。要么是 for 循环不放开 resizedImage,要么是上下文发生了什么事(不确定)。
【问题讨论】:
标签: ios objective-c memory-leaks uiimage