objective-cfoundation

How to Autorelease a CGImageRef?


I have a method that returns a CGImageRef object. It contains this call:

CGImageRef posterFrame = [avAssetImage copyCGImageAtTime:time actualTime:nil error:&error];
...
return posterFrame;

This situation, as I understand it, calls for an autorelease. But I have no idea how to do it. I've tried using CFCollectable(), but it doesn't work. Any ideas?


Solution

  • 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().