多年来我一直在努力为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绘图?任何帮助将不胜感激.谢谢.
我目前的企业项目基于PDF阅读器.我没有发布CGPDFDocument,我可以翻阅14页apple pdf,应用程序最大值为30mb.我不能给你代码,但我可以指出你正确的方向.
我在这里开始了一个类似的主题:iPhone/iPad/iOs的快速和精益PDF阅读器 - 提示和提示?
一些技巧:
- 尽可能将任何媒体保存到磁盘.
- 如果在TiledLayers上渲染,则使用更大的tileSizes
- 请注意图像的渲染速度比CGPDFPageRef快
- 使用NSOperations提前准备页面
.
- 回收页面对象
- 只要您不需要,就关闭任何打开的上下文
-on接收内存警告释放并重新加载DocRef