【发布时间】:2011-12-30 03:06:59
【问题描述】:
我在 SO 中检查了很多问题,他们建议发布然后重新创建 CGPDFDocumentRef。而我的最终代码是这样的
- (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 没有释放所有缓存,而是仅释放最近的页面,所以内存仍然一路增加。我以为bug修复了?如何完全释放一个CGPDFDocumentRef???
【问题讨论】:
标签: iphone objective-c pdf core-graphics quartz-graphics