2011-08-15 14 views
3

私はCGImageRefオブジェクトを返すメソッドを持っています。これには次の呼び出しが含まれます。CGImageRefを自動解除する方法は?

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

この状況は、私が理解するように、自動解放を要求します。しかし、私はそれをどうやって行うのか分かりません。私はCFCollectable()を使ってみましたが、うまくいきません。何か案は?

答えて

12

ガベージコレクションを使用している場合は、CFMakeCollectable(posterFrame)を使用してください。あなたは伝統的なメモリ管理を使用している場合、それは非常に簡単です:

return (CGImageRef)[(id)posterFrame autorelease]; 

あなたはそれを-autoreleaseメッセージを送信し、Objective-Cのオブジェクトポインタに(この場合、CGImageRefで)CFTypeRefをキャストした後、キャスト結果はCGImageRefに戻ります。このパターンは、CFRetain()およびCFRelease()と互換性のある(ほぼ)すべてのタイプで機能します。あなたはCreate(FE MyCreatePosterImage())を含むあなたの関数に名前を付けたり、UIImageオブジェクトを返すために、いずれかの必要CGImageRefあなたを返すようにしたいので、もし

+0

を一番美しい建築ではありませんが、お手入れしています。本当にありがとう! –

5

コアグラフィックス(およびCore Foundationのは)、autorelease poolを持っていない:

CGImageRef posterFrame = [avAssetImage copyCGImageAtTime:time actualTime:nil error:&error]; 
UIImage *result = [UIImage imageWithCGImage:posterFrame]; 
CGImageRelease(posterFrame); 
return result; 
関連する問題