iOS PDF渲染耗尽内存

时间:2012-08-29 12:32:09

标签: ios pdf memory uikit out-of-memory

我正在使用以下代码在iOS应用程序中渲染大约100页到pdf,基本上创建应用程序内容的屏幕截图:

...
UIGraphicsBeginPDFContextToFile(mainPath, currentFrame, nil);
for(Page *page in pages)
{
  @autoreleasepool
  {
    MainViewController *viewCtrl = [[MainViewController alloc] initWithPage:page contentController:[ContentController singleton] inBackground:NO];
    [self createPageWithView:viewCtrl.view];
  }
}
UIGraphicsEndPDFContext();



-(void)createPageWithView:(UIView *)view
{
  DLog(@"creating page...");
  UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0.0);
  [view.layer renderInContext:UIGraphicsGetCurrentContext()];
  UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();

  UIGraphicsBeginPDFPageWithInfo(currentFrame, nil);
  CGContextRef pdfContext = UIGraphicsGetCurrentContext();

  UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
  [imageView.layer renderInContext:pdfContext];
}

这在中途的某个地方耗尽了记忆。 mainviewController添加了几个子视图,没什么特别的。为什么会这样? autoreleasepool不应该清理已用过的内存吗?

1 个答案:

答案 0 :(得分:0)

PDF文件完全在内存中创建,并在调用UIGraphicsEndPDFContext时写入磁盘。如果PDF文件变得非常大,这会导致内存问题。