私は多くの問題をチェックしたので、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を解放する方法???
私が試してみましたが、それはそのせいでCGContextDrawPDFPage(CTX、ページ)のです。メモリの警告とクラッシュまでキャッシュを保存してメモリを大きくして大きくします – Lunayo
何を試しましたか? CGPDFDocumentRefは一度作成する必要があります。多くのメモリが必要です。 – DivineDesert
CGPDFDocumentRefをビューコントローラに配置し、ビューとレンダリングに渡します。しかし、CGContextDrawPDFPage(ctx、page);楽器やメモリに漏れが残っていることを継続的に増やしています。このリンクのhttp://stackoverflow.com/questions/3889634/fast-and-lean-pdf-viewer-for-iphone-ipad-ios-tips-and-hints/3890161#3890161には、毎回レイヤーを描くために再初期化しますか? – Lunayo