3

私がここで抱えている問題は何ですか?

スクリーンショット

4

3 に答える 3

6

ARC を有効にしている場合でも、それCocoa / Objective-C オブジェクトのみを対象としています。Core Foundation と Core Graphics API は異なり、作成されたオブジェクトのメモリも最終的には明示的に解放する必要があります。

あなたのコードではcreateCGIImage:、バランス リリースなしで " " を実行しています。

リリースは次のようになります。

CGImageRelease(myImageRef) 

したがって、これを正しく行うには、次のようにします。

CGImageRef myImageRef = [context createCGImage: outputImage fromRect: outputImage.extent];
UIImage * imageTemp = [UIImage imageWithCGImage: myImageRef];
CGImageRelease(myImageRef);
于 2013-06-21T09:50:52.293 に答える
1

CoreFoundation オブジェクトを扱っているため、ARC は無関係です。CGImageRef変数に割り当ててから、 で解放する必要がありますCFRelease(variableName)

すなわち

CGImageRef cgImage = [context createCGImage:...];
// rest of your code here
CFRelease(cgImage);
于 2013-06-21T09:53:58.260 に答える
1

[context createCGImage:fromRect:]メソッドは保持された を返しますCGImageRef。メモリ リークを修正するには、それへの参照を保存し、作業CGImageRefが完了したら解放する必要があります。

CGImageRef imageRef = [context createCGImage:outputImage fromRect:outputImage.extend];
imageTemp = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
于 2013-06-21T09:54:05.453 に答える