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