我正在尝试渲染一个带有一些注释的 PDF 页面(发送到电子邮件),而且大多数情况下它都可以正常工作。
但是,特别是对于此PDF,每次调用 CGContextDrawPDFPage 作为第一页时,它似乎都会崩溃。我已经添加了
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
CGContextSetRenderingIntent(context, kCGRenderingIntentDefault);
作为CGContextDrawPDFPage 的建议占用大量内存,但这似乎并没有解决我的问题。
我通过分析器运行它以查看发生了什么,它慢慢开始分配大量内存,直到最终达到 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