2011-03-08 5 views
5

안녕하세요 여기CGContextDrawPDFPage 메모리는

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 
{ 

     CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0); 
     CGContextFillRect(ctx, CGContextGetClipBoundingBox(ctx)); 
     CGContextTranslateCTM(ctx, 0.0, layer.bounds.size.height); 
     CGContextScaleCTM(ctx, 1.0, -1.0); 
     CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(myPageRef, kCGPDFCropBox, layer.bounds, 0, true)); 
     CGContextDrawPDFPage(ctx, myPageRef); 
} 

모두 잘 CATiledlayer에서 PDF를 그리기 내 코드 누출하지만 난 라인을

 CGContextDrawPDFPage(ctx, myPageRef); 

다음의 메모리 누수 경고를 가지고 github에서 코드를 다운로드하고 R & D를 작성하여 찾았습니다.

나는

내 메모리 누수가 해결이 코드를 작성 후

....

// Clean up. 

- (void)dealloc { 
    CGPDFPageRelease(myPageRef); 
    [super dealloc]; 
} 

답변

5

CGPDFPageRef

입니다
+0

당신은 어떻게해야 당신이 어떤 점에서 그것을 유지하는 경우 그. 그러나'CGPDFDocumentGetPage'를 수행하는 중이라면 자동 회수 객체를 얻게되므로 해제하지 않아야합니다. (분명히, 당신이 그것을 유지한다면, 당연히 당신은이 대답에서 제안 된 것처럼 그것을 풀어 놓아야 만합니다.) – Rob

+0

https://stackoverflow.com/questions/46903182/cgcontextdrawpdfpage-memory-leak-app-crash – Ravindhiran

3

CGContextDrawPDFPage 전에

CGContextSetInterpolationQuality(context, kCGInterpolationHigh); 
CGContextSetRenderingIntent(context, kCGRenderingIntentDefault); 

가 해결 호출 .. 내 TiledView의 dealloc 방법에 CGPDFPageRelease(myPageRef)를 해제하는 것을 잊었다 내 비슷한 문제.

크레딧은 요한이 대답에 간다 : CGContextDrawPDFPage taking up large amounts of memory

관련 문제