0
 (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 相关的发布吗?

谢谢

4

1 回答 1

3

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

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

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

这可能是一个相当大的泄漏,具体取决于图像的大小。

于 2012-08-07T20:49:26.073 回答