Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Having trouble with releases in core graphics

I've just started with releasing in core graphics, so I might need a little help.

I have code which looks like this:

UIImage *buttonImage() {

UIGraphicsBeginImageContextWithOptions(bounds.size, NO, 0);
    CGContextRef context = UIGraphicsGetCurrentContext();


    CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB();


    CGMutablePathRef outerPath;
    CGMutablePathRef midPath;
    CGMutablePathRef innerPath;
    CGMutablePathRef highlightPath;

//Some button stuff

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    CGContextRelease(context);

    return image;

}

That release line, I've put in. I'm getting an error with it though:

context_reclaim: invalid context
context_finalize: invalid context

Any thoughts as to where i should put the release in this instance?

like image 210
Andrew Avatar asked Dec 15 '22 22:12

Andrew


1 Answers

You only need to do CGContextRelease(context) if you have previously done a CFRetain(context) or a CGContextRetain(context), or if you created the context yourself. In your example, you are calling UIGraphicsBeginImageContextWithOptions(), which is handling the creation of the context for you, thus, calling CGContextRelease() yourself is over-releasing it.

You do need to balance the CGColorSpaceCreateDeviceRGB() with either a:

CGColorSpaceRelease(baseSpace)

or a :

if (baseSpace) CFRelease(baseSpace)
like image 139
iccir Avatar answered Dec 28 '22 11:12

iccir