以下图形代码标记为iOS ARC泄漏

时间:2012-08-07 20:44:22

标签: ios cgcontext

 (UIImage *) cropToSquare:(UIImage *)_image 
 {
if(_image.size.height < _image.size.width)
{
    CGRect drawRect = CGRectMake(0, 0, _image.size.height, _image.size.height); 
    UIGraphicsBeginImageContext(drawRect.size);
    CGContextRef currentContext = UIGraphicsGetCurrentContext();
    CGRect cropArea = CGRectMake (((_image.size.width - _image.size.height)/2), 0, _image.size.height, _image.size.height);
    CGContextTranslateCTM(currentContext, 0.0, _image.size.height);
    CGContextScaleCTM(currentContext, 1.0, -1.0);
    CGContextDrawImage(currentContext, drawRect, CGImageCreateWithImageInRect (_image.CGImage, cropArea));
    UIImage *cropped = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return cropped;
}
else
{
    return _image;
}

}

CGContextDrawImage(currentContext,drawRect,CGImageCreateWithImageInRect(_image.CGImage,cropArea))标记了100%的泄漏。

我自己需要做任何与CG相关的发布吗?

感谢

1 个答案:

答案 0 :(得分:3)

我相信ARC仅适用于Cocoa对象,它不适用于Core *框架。

要修复泄漏,您需要更改为以下内容:

CGImageRef myImage = CGImageCreateWithImageInRect (_image.CGImage, cropArea);
CGContextDrawImage(currentContext, drawRect, myImage);
CFImageRelease(myImage);

根据图像的大小,这可能是一个非常大的泄漏。