iphone - 如何释放 CGContextDrawPDFPage 创建的内存

标签 iphone

这是 ipad 杂志应用程序。我们需要读取 PDF 并将其转换为 PNG 图像作为缩略图。在转换之前读取 PDF(调用 CGContextDrawPDFPage)后,内存会快速增加,并且永远不会释放,直到崩溃。我尝试了很多方法但都不起作用。如果有人能提供帮助,我真的很感激。

CGContextDrawPDFPage(上下文,aPage);//这是内存 killer

完整代码如下:

-(UIImage *)图像:(CGPDFPageRef)aPage 矩形:(CGRect)aRect { CGRect pdfcropBox = CGRectIntegral(CGPDFPageGetBoxRect(aPage, kCGPDFCropBox));

if ((float)pdfcropBox.size.width/(float)pdfcropBox.size.height > 
    (float)aRect.size.width/(float)aRect.size.height) //pdf width too big
{
    aRect.size.height = aRect.size.width * pdfcropBox.size.height / pdfcropBox.size.width;
}
//CGRect pdfcropBox = aRect;    

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL,aRect.size.width,
                                             aRect.size.height,
                                             8,
                                             (int)aRect.size.width * 4,
                                             colorSpace, 
                                             kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

CGColorSpaceRelease(colorSpace);
colorSpace = nil;

CGPDFPageRetain(aPage);
CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(aPage,
                                                              kCGPDFCropBox,
                                                              CGRectMake(0, 0, aRect.size.width,aRect.size.height),
                                                              0, true);
CGContextSaveGState(context);
CGContextConcatCTM(context, pdfTransform);
CGContextDrawPDFPage(context, aPage);
CGPDFPageRelease (aPage);
aPage = nil;
CGContextRestoreGState(context);    
CGImageRef image = CGBitmapContextCreateImage(context);
UIImage *resultingImage =  [UIImage imageWithCGImage:image];
CGContextClearRect(context, aRect);
CGContextClearRect(context, pdfcropBox);

CGContextRelease(context);
CGImageRelease(image);
context = nil; 

NSLog(@"colorSpace :%d,aPage :%d,context :%d",[colorSpace retainCount],[aPage retainCount],[context retainCount]);
return resultingImage;

}

最佳答案

您需要按照此处的说明释放并重新打开 CGPDFDocument Fast and Lean PDF Viewer for iPhone / iPad / iOs - tips and hints?

关于iphone - 如何释放 CGContextDrawPDFPage 创建的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4623086/

相关文章:

ios - 推送通知参数本地化

iphone - 应用程序在启动时退出

iphone - 如何在PDF文档上设置注释,此注释不仅对特定应用程序可见,而且对所有PDF阅读器可见

ios - Xcode 自动建议和索引问题

iphone - 在加载另一个 ViewController 时呈现模态视图 Controller

iphone - 子类化的 UIView 没有设置标签

iphone - 使用 native 功能下载多个图像 IOS

iphone - Iphone 的 MMX 说明

ios - 从地面确定 iPhone 的高度

ios - 从 UIWebView 在 Safari 中打开 URL 文件 (.pdf)