【发布时间】:2012-03-19 05:17:42
【问题描述】:
我正在尝试渲染一个带有一些注释的 PDF 页面(发送到电子邮件),而且大多数情况下它都可以正常工作。
但是,尤其是这个PDF,它似乎每次在第一页调用 CGContextDrawPDFPage 时都会崩溃。我已经添加了
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
CGContextSetRenderingIntent(context, kCGRenderingIntentDefault);
作为CGContextDrawPDFPage taking up large amounts of memory 的建议,但这似乎并没有解决我的问题。
我通过分析器运行它以查看发生了什么,它慢慢开始分配一堆内存,直到最终达到 512MB 的活动字节并死亡。
奇怪的是,当我将它渲染到图像(用于在设备上显示)上下文时,它似乎工作正常,但是当我将它渲染到 PDF 上下文(用于带注释的电子邮件)时,它会中断。我尝试过的所有其他 PDF 在这两种情况下都可以正常工作。
我希望编写 PDF 查看器/注释器的人可以测试一下,看看这个文档是否适合他们,如果适合,请给我一些提示,告诉我他们正在做些什么来减少 CGContextDrawPDFPage 的内存分配。
我查看的另一个资源是这个很棒的SO Question.
编辑(有关崩溃的更多信息):
在 90% 的情况下,崩溃实际上并没有出现,gdb 行会显示,但应用程序会消失并且堆栈跟踪不会显示。 (它说暂停但没有线程显示)。有一次我看到它是一个 exc_bad_access,它在日志中显示了这一点:
malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
【问题讨论】:
-
我添加了关于崩溃的编辑。
标签: ios memory-management instruments cgpdfdocument