我正在尝试渲染带有一些注释的PDF页面(发送电子邮件),大部分时间都可以正常工作。
但是,特别是PDF,每次调用第一页的CGContextDrawPDFPage时,它似乎都会崩溃。我添加了
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
CGContextSetRenderingIntent(context, kCGRenderingIntentDefault);
作为CGContextDrawPDFPage taking up large amounts of memory的推荐,但似乎没有解决我的问题。
我通过探查器运行它以查看发生了什么,并且它慢慢开始分配一堆内存,直到它最终达到512MB的实时字节并且死亡。
奇怪的是,当我将其呈现给图像(用于在设备上显示)时,它似乎工作正常,但当我将其渲染到PDF上下文(用于通过注释发送电子邮件)时,它会中断。我尝试过的所有其他PDF在这两种情况下都能正常工作。
我希望有人写一个PDF查看器/注释器可以测试这个,看看这个文档是否适用于他们,如果是的话,给我一些提示,说明他们正在做些什么来减少CGContextDrawPDFPage的内存分配。 / p>
我看到的另一个资源就是这个很棒的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
答案 0 :(得分:1)
您是在主线程上构建PDF吗?如果是这样,您可能没有收到内存警告,因为您在执行过程中阻止了信号,因为运行循环永远不会有机会将消息发送给您。
答案 1 :(得分:0)
删除xcode中的异常断点,它可以正常工作。