2011-08-13 4 views
3

비트 맵 컨텍스트를 해제하는 방법을 잘 모르겠습니다.CGBitmapContext 메모리 누수를 생성 하시겠습니까?

나는 다음과 같은 일을 해요 :

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

엑스 코드는 여전히 분석 나에게 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() 전화에서 누출되었습니다. 색상 공간도 해제해야합니다.

관련 문제