如何自动发布CGImageRef?

Aar*_*egh 3 objective-c foundation

我有一个返回CGImageRef对象的方法.它包含这个电话:

CGImageRef posterFrame = [avAssetImage copyCGImageAtTime:time actualTime:nil error:&error];
...
return posterFrame;
Run Code Online (Sandbox Code Playgroud)

据我所知,这种情况需要自动释放.但我不知道该怎么做.我尝试过使用CFCollectable(),但它不起作用.有任何想法吗?

Jon*_*pan 12

如果您正在使用垃圾收集,请使用CFMakeCollectable(posterFrame).如果您正在使用传统的内存管理,那么它非常简单:

return (CGImageRef)[(id)posterFrame autorelease];
Run Code Online (Sandbox Code Playgroud)

您将CFTypeRef(在本例中为a CGImageRef)转换为Objective-C对象指针,将其发送给-autorelease消息,然后将结果转换回CGImageRef.此模式适用于(几乎)任何与CFRetain()and 兼容的类型CFRelease().


And*_*riy 5

Core Graphics(和Core Foundation)没有自动释放池,所以如果你想要返回CGImageRef你需要命名你的函数包含Create(fe MyCreatePosterImage())或返回UIImage对象:

CGImageRef posterFrame = [avAssetImage copyCGImageAtTime:time actualTime:nil error:&error];
UIImage *result = [UIImage imageWithCGImage:posterFrame];
CGImageRelease(posterFrame);
return result;
Run Code Online (Sandbox Code Playgroud)