I have a method that returns a CGImageRef
object. It contains this call:
CGImageRef posterFrame = [avAssetImage copyCGImageAtTime:time actualTim
Core Graphics (and Core Foundation) doesn't have an autorelease pool, so if you want to return your CGImageRef
you need to either name your function containing Create
(f.e. MyCreatePosterImage()
) or return UIImage
object instead:
CGImageRef posterFrame = [avAssetImage copyCGImageAtTime:time actualTime:nil error:&error];
UIImage *result = [UIImage imageWithCGImage:posterFrame];
CGImageRelease(posterFrame);
return result;
If you're using garbage collection, use CFMakeCollectable(posterFrame)
. If you're using traditional memory management, it's very straightforward:
return (CGImageRef)[(id)posterFrame autorelease];
You cast the CFTypeRef
(in this case, a CGImageRef
) to an Objective-C object pointer, send it the -autorelease
message, and then cast the result back to CGImageRef
. This pattern works for (almost) any type that's compatible with CFRetain()
and CFRelease()
.