Lou*_*ker 7 memory-management objective-c quartz-graphics
我在使用这个返回CGImageRef的自定义方法时遇到内存泄漏.我无法正确释放"cgImage",因为我必须将它返回.我该怎么办?
- (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;
}
Run Code Online (Sandbox Code Playgroud)
Jac*_*kin 17
cgImage由您的方法拥有,您需要返回它并对调用者负责释放它CFRelease.
您还可以返回CGImage包装在UIImage实例中,如下所示:
UIImage *image = [UIImage imageWithCGImage:cgImage];
CFRelease(cgImage); //cgImage is retained by the UIImage above
return image;
Run Code Online (Sandbox Code Playgroud)
Ole*_*ann 10
这是Core Foundation对象的一般问题,因为CF中没有自动释放池.在我看来,你有两个选择来解决这个问题:
-newRectRoundedImageRef:radius:为告诉调用者他获取返回对象的所有权并负责释放它.CGImageRef自动释放的UIImage对象换行并返回([UIImage imageWithCGImage:]).这可能就是我要做的.| 归档时间: |
|
| 查看次数: |
9255 次 |
| 最近记录: |