2

我正在尝试渲染一个带有一些注释的 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
4

2 回答 2

1

您是否在主线程上构建 PDF?如果是这样,您可能不会收到内存警告,因为您在执行时阻止了信号,因为运行循环永远没有机会向您发送消息。

于 2012-02-29T20:14:00.327 回答
-1

删除xcode中的异常断点,它工作正常。

于 2016-01-05T10:31:46.973 回答