无法在iOS上创建400多页的PDF文档

TP.*_*TP. 16 pdf pdf-generation objective-c quartz-graphics ios

我使用以下伪代码生成PDF文档:

CGContextRef context = CGPDFContextCreateWithURL(url, &rect, NULL);

for (int i = 1; i <= N; i++)
{
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  CGContextBeginPage(context, &mediaBox);

  // drawing code

  CGContextEndPage(context);
  [pool release];
}

CGContextRelease(context);
Run Code Online (Sandbox Code Playgroud)

它适用于小文档(N < 100页面),但如果文档超过大约400页(它在崩溃之前收到两个内存警告),它会占用太多内存和崩溃.我确保使用Instruments没有泄漏.您对在iOS上创建大型PDF文档有何建议?非常感谢.

编辑:pdf创建在后台线程中完成.

Mat*_*ick 6

既然你通过创建一个单一的文件CGPDFContextCreateWithURL,整个事情已经在内存中举行,附加到,一些常用的(虽然我不能肯定与iOS和说CGPDFContextCreateWithURL),需要一个完整的将该文件拷贝到要保持.即使没有前后问题,也不需要泄漏来产生问题.

如果您没有尝试捕获一堆现有的UIKit绘制的东西 - 并且在您的示例中似乎您不是 - 使用操作系统的打印方法,它提供内置支持打印到PDF.UIGraphicsBeginPDFContextToFile将页面写入磁盘,因为它们被添加,因此整个过程不必一次保存在内存中.你应该能够以这种方式生成一个巨大的PDF.


NSR*_*der 1

如果分配太多内存,您的应用程序将会崩溃。为什么生成异常大的 PDF 是一个目标?你到底想实现什么目标?