2011-08-13 27 views
3

我不確定如何釋放位圖上下文。CGBitmapContextCreate內存泄漏?

我做了以下內容:

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

Xcode的分析仍然給我就行CGBitmapContextCreate一個「潛在的內存泄漏」。

我在做什麼錯?

回答

7

由於您沒有將CGColorSpaceCreateDeviceRGB()的結果賦值給一個變量,因此您不再引用該方法創建的對象。
稍後您需要該參考才能釋放色彩空間對象。 Core Graphics遵循Core Foundation內存管理規則。 你可以找到更多關於該here

固定版本的代碼:

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

如果您點擊了你的源代碼分析的地方,你會得到一個箭頭圖,顯示你泄漏起源的藍色圖標。 (我認爲它會指向你創建顏色空間的那一行)

+0

我有同樣的問題,但是當我使用你的代碼時,我的CGContextRef變爲null。我的意思是如果我稍後在較冷的空間中引用該對象以釋放色彩空間。在這種情況下,我的上下文爲null –

+1

也許您將錯誤的值傳遞給CGBitmapContextCreate。當上下文創建失敗時,此方法返回NULL。 –

+0

是的,我檢查了寬度和高度的值都爲零,這是 –

2

您正在從CGColorSpaceCreateDeviceRGB()調用中泄漏顏色空間對象。你也需要釋放色彩空間。