2014-04-16 4 views
4

У меня есть функция:EXC_BAD_ACCESS ошибка с CGImageRef

- (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 , кажется, работает, когда я удалить строку - но это было бы не вызвать утечку памяти?

+0

ли эта линия как-то освободить оригинальный UIImage? (параметр изображения) – Halpo

+2

Вы должны вызвать CGImageRelease только при использовании CGImageCreate, Copy или Retain. вам не нужно вызывать CGImageRelease в вашем случае –

ответ

2

Вы не являетесь владельцем CGImageRef imageRef, потому что получаете его с помощью [image CGImage], поэтому вам не нужно его выпускать.

Взгляните на этот, а также: How do I release a CGImageRef in iOS

Смежные вопросы