1


我正在开发几个基本上是 PDF 阅读器的应用程序。从 iOS 6 开始,应用程序开始因为内存不足而崩溃。我们的应用程序使用PDF Reader,但问题与此无关。到目前为止,我们发现:
1. 泄漏来自CGContextDrawPDFPage
2. 它在 iOS <6 中不存在(或不那么突出)
3. 在没有或小压缩的 PDFS 上不会发生泄漏

具体来说:打开经过一定压缩的 PDF 后,会使用一些内存。当 PDF 关闭时,部分内存被释放。然而,并不是全部。您可以通过多次打开和关闭 PDF 轻松获得内存警告,然后使应用程序崩溃。
我也试过PSPDF,虽然它比 PDF Reader 有优势(速度),但它要贵得多,而且里面也有同样的泄漏。

我为PDF ReaderPSPDF Kit创建了非常简单的测试项目。(您只需要在项目中添加一些 PDF)

我可以做些什么来修复 iOS 6 中的泄漏,或者我做错了什么并且实际上没有泄漏?我目前的方法是等待官方修复。
我知道这个问题在这里被大量讨论,但我相信我的情况有点不同。(使用 ARC 和经过测试的库,在模拟器和设备上可见泄漏)

谢谢你。

4

1 回答 1

0

经过大量尝试,我发现只有两个解决方案。但是,它们都不是完美的。

1) 使用 Apple 的QuickLook 框架
- 在 iOS <6.0
中没有泄漏 - 在 iOS 6.0 中没有泄漏。

QuickLook 在另一个使用 XPC 的进程中运行。然而,这也意味着实际上没有定制。(通过链接的博客文章查看此问题)

2) 使用FastPdfKit
似乎没有CGContextDrawPDFPage涉及,或者可能只是一些巧妙的优化,但 FastPdfKit 没有泄漏。缺点有两个 - 库是商业的,即使您购买了许可证,它的渲染引擎也不会显示给您。您可以使用具有所有功能的免费版本,但有一个启动画面。

由于我们面临时间压力,既不能等待官方错误修复,也不能放弃我们当前的功能,我们选择了 FastPdfKit。


我不认为这是一个确定的答案。图书馆适合我们的需要,可能不适合您。此外,它是一种商业产品。如果有更直接的解决方案,我很乐意接受。

于 2013-01-14T20:53:22.330 回答