3

ビットマップコンテキストを解放する方法がわかりません。

私は次のことをしています:

CGContextRef context = CGBitmapContextCreate(nil, size.width, size.height, 8, 0, CGColorSpaceCreateDeviceRGB(), kCGBitmapAlphaInfoMask);
.
. // (All straightforward code)
. 
CGContextRelease(context);

Xcode Analyzeでも、CGBitmapContextCreate行に「潜在的なメモリリーク」が発生します。

私は何が間違っているのですか?

4

2 に答える 2

7

CGColorSpaceCreateDeviceRGB()の結果を変数に割り当てないため、そのメソッドによって作成されたオブジェクトへの参照が失われます。
カラースペースオブジェクトを解放するには、後でその参照が必要になります。Core Graphicsは、CoreFoundationのメモリ管理ルールに従います。詳細については、こちらをご覧ください。

コードの修正バージョン:

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(nil, size.width, size.height, 8, 0, colorSpace, kCGBitmapAlphaInfoMask);
.
. // (All straightforward code)
. 
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);

コードアナライザーがソースに配置する青いアイコンをクリックすると、リークの原因を示す矢印グラフが表示されます。(色空間を作成する線を指していると思います)

于 2011-08-13T15:30:18.447 に答える
2

呼び出しから色空間オブジェクトをリークしていCGColorSpaceCreateDeviceRGB()ます。色空間も解放する必要があります。

于 2011-08-13T14:53:47.543 に答える