CGImageRef内存泄漏 [英] CGImageRef Memory leak
本文介绍了CGImageRef内存泄漏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
使用此自定义方法返回CGImageRef时发生内存泄漏.我无法正确释放"cgImage",因为我必须将其返回.我该怎么办?
I'm having a memory leak when using this custom method which returns a CGImageRef. I can't release "cgImage" properly because I have to return it. What chould I do ?
- (CGImageRef)rectRoundedImageRef:(CGRect)rect radius:(int)radius
{
CGSize contextSize = CGSizeMake(rect.size.width, rect.size.height);
CGFloat imageScale = (CGFloat)1.0;
CGFloat width = contextSize.width;
CGFloat height = contextSize.height;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, width * imageScale, height * imageScale, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
// Draw ...
// Get your image
CGImageRef cgImage = CGBitmapContextCreateImage(context);
CGColorSpaceRelease(colorSpace);
CGContextRelease(context);
//CGImageRelease(cgImage); //If I release cgImage the app crashes.
return cgImage;
}
推荐答案
cgImage
由您的方法拥有,您需要将其返回并赋予调用方责任,以通过CFRelease
释放它.
cgImage
is owned by your method, you need to return it and give responsibility to the caller to release it through CFRelease
.
您还可以返回包装在UIImage
实例中的CGImage
,如下所示:
You can also return the CGImage
wrapped inside a UIImage
instance, like this:
UIImage *image = [UIImage imageWithCGImage:cgImage];
CFRelease(cgImage); //cgImage is retained by the UIImage above
return image;
这篇关于CGImageRef内存泄漏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文