2011-11-16 3 views
2

私は多くの問題をチェックしたので、CGPDFDocumentRefを解放してから再作成するように提案しました。そして、私の最終的なコードは、このCGContextDrawPDFPageリークを使用してPDFページを描画する異常に

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx { 
CFURLRef pdfURL = (CFURLRef)_pdfLocation; 

CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL(pdfURL); 

if (CGPDFDocumentIsEncrypted(pdf)) { 
    CGPDFDocumentUnlockWithPassword(pdf, (char *)[PDF_PASSWORD UTF8String]); 
} 

CGPDFPageRef page = CGPDFDocumentGetPage(pdf, _pageNumber); 

CGContextSetRGBFillColor(ctx, 1.0f, 1.0f, 1.0f, 1.0f); 
CGContextFillRect(ctx, CGContextGetClipBoundingBox(ctx)); 
CGContextTranslateCTM(ctx, 0.0f, [layer bounds].size.height); 

CGContextScaleCTM(ctx, 1.0f, -1.0f); 

CGRect mediaRect = CGPDFPageGetBoxRect(page, kCGPDFCropBox); 
CGContextScaleCTM(ctx, [layer bounds].size.width/mediaRect.size.width, [layer bounds].size.height/mediaRect.size.height); 
CGContextTranslateCTM(ctx, -mediaRect.origin.x, -mediaRect.origin.y); 
CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh); 
CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault);  

CGContextDrawPDFPage(ctx, page); 


CGPDFDocumentRelease(pdf); 

} 

のようなものですがCGPDFDocumentRefを再作成するための正しい方法上記のコードですか? CGContextDrawPDFPage(ctx、page);この行に "時には"リークが発生します。約10ページをスクロールすると発生します。そして、このリンクFast and Lean PDF Viewer for iPhone/iPad/iOs - tips and hints?に従うと、メモリ警告が発生するたびにCGPDFDocumentRefを解放しようとしましたが、CGPDFDocumentRefはすべてのキャッシュを解放しませんでしたが、最近のページのみをリリースしています。私はバグが修正されたと思った?完全にCGPDFDocumentRefを解放する方法???

答えて

2

ドント

CGPDFDocumentRefのPDF = CGPDFDocumentCreateWithURL(pdfURL)を使用します。

drawLayer。これが呼び出されるたびに、新しい文書refが作成されます。代わりに、ウルトラView Controllerで単一のドキュメント参照を作成し、毎回使用します。代わりに

使用この行を CGPDFPageRelease (page);

+0

私が試してみましたが、それはそのせいでCGContextDrawPDFPage(CTX、ページ)のです。メモリの警告とクラッシュまでキャッシュを保存してメモリを大きくして大きくします – Lunayo

+0

何を試しましたか? CGPDFDocumentRefは一度作成する必要があります。多くのメモリが必要です。 – DivineDesert

+0

CGPDFDocumentRefをビューコントローラに配置し、ビューとレンダリングに渡します。しかし、CGContextDrawPDFPage(ctx、page);楽器やメモリに漏れが残っていることを継続的に増やしています。このリンクのhttp://stackoverflow.com/questions/3889634/fast-and-lean-pdf-viewer-for-iphone-ipad-ios-tips-and-hints/3890161#3890161には、毎回レイヤーを描くために再初期化しますか? – Lunayo

関連する問題