Я проверил много вопросов в 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 страниц.И перейдите по этой ссылке Быстрый и Lean PDF Viewer для iPhone / iPad / iOs - советы и подсказки? , я пытался освободить CGPDFDocumentRef всякий раз, когда появляется предупреждение о памяти, но в результате CGPDFDocumentRef не выпускал всекеш, но только недавно выпустила страницу, поэтому память все равно увеличивается.Я думал, что ошибка была исправлена?Как полностью освободить CGPDFDocumentRef ???