【问题标题】:EXC_BAD_ACCESS error with CGImageRefCGImageRef 出现 EXC_BAD_ACCESS 错误
【发布时间】:2014-05-31 01:56:12
【问题描述】:

我有一个函数:

- (UIImage *) resizeImage:(UIImage *)image width:(CGFloat)resizedWidth height:(CGFloat)resizedHeight shouldCrop:(BOOL)crop
{
    CGImageRef imageRef = [image CGImage];
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef bitmap = CGBitmapContextCreate(NULL, resizedWidth, resizedHeight, 8, 4 * resizedWidth, colorSpace, (CGBitmapInfo) kCGImageAlphaPremultipliedFirst);

    CGContextDrawImage(bitmap, CGRectMake(0, 0, resizedWidth, resizedHeight), imageRef);
    CGImageRef ref = CGBitmapContextCreateImage(bitmap);

    if (crop) // for SmallImage (tableviewcell)
    {
        CGRect cropRect = CGRectMake(0, CGImageGetHeight(ref) * 0.5 - ((float) kIvHeight * 0.5), (float) kIvWidth, (float) kIvHeight);
        ref = CGImageCreateWithImageInRect(ref, cropRect);
    }

    UIImage * result = [UIImage imageWithCGImage:ref];

    CGContextRelease(bitmap);
    CGImageRelease(ref);
    CGImageRelease(imageRef);
    return result;
}

CGImageRelease(imageRef); 行导致我的应用程序因EXC_BAD_ACCESS 而崩溃 当我删除该行时它似乎可以工作 - 但这不会导致内存泄漏吗?

【问题讨论】:

  • 这一行是否以某种方式解除了原始 UIImage 的分配? (图像参数)
  • 只有在使用 CGImageCreate、Copy 或 Retain 时才需要调用 CGImageRelease。你不需要在你的情况下调用 CGImageRelease

标签: ios exc-bad-access cgimage


【解决方案1】:

您不拥有CGImageRef imageRef,因为您使用[image CGImage] 获得它,因此您不需要释放它。

也看看这个:How do I release a CGImageRef in iOS

【讨论】:

    猜你喜欢
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    • 1970-01-01
    • 2010-10-08
    相关资源
    最近更新 更多