还有其他人遇到过这个问题吗?由于CGBitmapContextCreateImage,ObjectAlloc爬升。 Apple的软件没有完全释放objectalloc吗?
我使用NSTimer每秒调整12次图像大小。在调整图像大小的过程中,我还通过包含interpolationQuality来添加类似高斯模糊效果的Photoshop。
使用仪器后,它没有显示任何内存泄漏但我的objectalloc只是继续爬升。它直接指向 CGBitmapContextCreateImage CGBitmapContextCreateImage> create_bitmap_ data_provide>的malloc
有人知道解决方案吗?甚至可能的想法?
NSTimer内的电话
NSString * fileLocation = [[NSBundle mainBundle] pathForResource:imgMain ofType:@"jpg"];
NSData * imageData = [NSData dataWithContentsOfFile:fileLocation];
UIImage * blurMe = [UIImage imageWithData:imageData];
CGRect rect = CGRectMake(0, 0, round(blurMe.size.width /dblBlurLevel), round(blurMe.size.width /dblBlurLevel));
UIImage * imageShrink = [self resizedImage: blurMe : rect : 3.0];
CGRect rect2 = CGRectMake(0, 0, blurMe.size.width , blurMe.size.width );
UIImage * imageReize = [self resizedImage: imageShrink : rect2 : 3.0];
imgView.image = imageReize;
调整大小功能
-(UIImage *) resizedImage:(UIImage *)inImage : (CGRect)thumbRect : (double)interpolationQuality
{
CGImageRef imageRef = [inImage CGImage];
CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef);
if (alphaInfo == kCGImageAlphaNone)
alphaInfo = kCGImageAlphaNoneSkipLast;
// Build a bitmap context that's the size of the thumbRect
CGContextRef bitmap = CGBitmapContextCreate(
NULL,
thumbRect.size.width,
thumbRect.size.height,
CGImageGetBitsPerComponent(imageRef),
4 * thumbRect.size.width,
CGImageGetColorSpace(imageRef),
alphaInfo
);
// Draw into the context, this scales the image
CGContextSetInterpolationQuality(bitmap, interpolationQuality);
CGContextDrawImage(bitmap, thumbRect, imageRef);
// Get an image from the context and a UIImage
CGImageRef ref = CGBitmapContextCreateImage(bitmap);
UIImage* result = [UIImage imageWithCGImage:ref];
CGContextRelease(bitmap); // ok if NULL
CGImageRelease(ref);
return [result autorelease];
}
答案 0 :(得分:1)
该代码过度发布result
。
也就是说,问题很可能是UIImage没有被释放,UIImage保留在CGImage上,而CGImage保存在CGBitmapContextCreate下分配的内存中。
使用工具查看UIImages是否未被解除分配,如果是,请尝试调试原因。
答案 1 :(得分:-1)
我编译并运行你的代码,我没有看到任何泄漏,我的对象分配也没有继续攀升。我每秒运行代码几次,并且看不到任何对象增长。我只在模拟器上运行。我也尝试了kCGInterpolationNone而不是3.0,以防出现问题,但仍然没有泄漏。
不知道为什么我没有得到它们而你做到了。您可能希望在方法中执行此操作:
-(UIImage *) resizedImage:(UIImage *)inImage : (CGRect)thumbRect : (double)interpolationQuality
{
CGImageRef imageRef = [inImage CGImage];
CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef);
return inImage;
...
为了使这个方法毫无意义,然后观察对象alloc是否继续增长。如果是这样,那么问题出在其他地方。