2012-06-14 2 views
4

이제 핵심 그래픽을 릴리스하기 시작 했으므로 약간의 도움이 필요할 수 있습니다.핵심 그래픽의 릴리스에 문제가 있습니다.

I는 다음과 같다 코드가 있습니다.

context_reclaim: invalid context 
context_finalize: invalid context 

어떤 생각을에 같이 릴리스 라인, 내가 넣어했습니다 그건 그래도 난 그것으로 오류를 받고 있어요

UIImage *buttonImage() { 

UIGraphicsBeginImageContextWithOptions(bounds.size, NO, 0); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 


    CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB(); 


    CGMutablePathRef outerPath; 
    CGMutablePathRef midPath; 
    CGMutablePathRef innerPath; 
    CGMutablePathRef highlightPath; 

//Some button stuff 

UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 

    CGContextRelease(context); 

    return image; 

} 

이 인스턴스에 어디서 릴리스해야합니까?

답변

6

이전에 CFRetain(context) 또는 CGContextRetain(context)을 수행했거나 직접 컨텍스트를 만든 경우에만 CGContextRelease(context)을 수행하면됩니다. 귀하의 예에서는 UIGraphicsBeginImageContextWithOptions()으로 전화를 걸어 컨텍스트 생성을 처리하므로 CGContextRelease()을 호출하면 사용자가 넘쳐납니다.

당신이 중 하나와 함께 CGColorSpaceCreateDeviceRGB() 균형을해야합니까 :

CGColorSpaceRelease(baseSpace) 

또는를 : UIGraphicsGetCurrentContext를 사용하는 경우

if (baseSpace) CFRelease(baseSpace) 
6

당신은 컨텍스트를 보유하고 있지 않습니다. 그러므로 당신은 그것을 공개해서는 안됩니다. CGContextRetain()을 사용한다면 해제 할 것입니다. 이에 대한 자세한 내용은 여기에서 볼 수 있습니다 :

Memory Management Guide for Core Foundation

은 내가보기 엔 그것이 어떻게 작동하는지에 대한 이해를 얻기 위해 Memory Management 프로그래밍 가이드를 읽는 것이 좋습니다.

관련 문제