【问题标题】:CGPDF iPhone/iPad memory problemsCGPDF iPhone/iPad 内存问题
【发布时间】:2011-04-24 09:05:01
【问题描述】:

多年来,我一直在努力为 iPhone/iPad 制作一个可以工作的 PDF 阅读器,但它不会停止消耗内存。似乎所有用 CGContextDrawPDFPage 绘制的页面都在内部缓存并且从未释放。

我不是唯一一个遇到这个问题的人:http://lists.apple.com/archives/quartz-dev/2010/Apr/msg00025.html

http://web.archiveorange.com/archive/v/SEb6acvPicMB2NdIjEd3

来自第一个线程的一个响应:

如果这是我想的那样,那不是泄漏,而是缓存。与其在调用之间保留 PDF 文档,不如尝试创建文档、获取并绘制页面,然后在完成后发布文档。

我试过了,它解决了这个问题,但是它太慢了。而以“正常”方式(即不为每次抽奖加载/释放 CGPDFDocument)工作良好且相当快,直到我到达文档的第 4 或第 5 页并且它崩溃。

我已经用谷歌搜索这个问题很久了:每个人都有同样的问题,但显然没有人能解决这个问题。我发现的唯一示例加载了单页 PDF,因此显然一切正常,直到您加载包含多页的文档(当然,如果该内容中有图像,它甚至更早崩溃)。这真让我抓狂。

所以问题是:您如何在您的应用程序中使用 CGPDF 处理 PDF 绘图?任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: iphone ipad pdf


    【解决方案1】:

    我当前的企业项目基于 PDF 阅读器。我不发布 CGPDFDocument,我可以翻阅一个 14 页的苹果 pdf,应用程序最大为 30mb。我不能给你代码,但我可以为你指出正确的方向。

    我在这里开了一个类似的帖子:Fast and Lean PDF Viewer for iPhone / iPad / iOs - tips and hints?

    一些提示:

    -尽可能将任何媒体保存到磁盘。

    -如果在 TiledLayers 上渲染,使用更大的 tileSizes

    -注意图像的渲染速度比 CGPDFPageRef 快

    -使用 NSOperations 提前准备页面
    时间。

    -回收页面对象

    -在不需要时立即关闭所有打开的上下文

    -在收到内存警告时释放并重新加载 DocRef

    【讨论】:

    • 感谢您回答并链接到该主题,帮助很大。
    • 嗯我有一个问题,我们如何释放和重新加载 docref(CGPDFDocumentRef).. 这像 CFRelease(docRef) 然后重新加载是吗?创建(CGPDFDocumentCreateWithRUL...)?我将它放在内存警告部分,它使我的应用程序崩溃。我应该如何正确地做到这一点?嗯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    相关资源
    最近更新 更多