0

我正在使用以下代码在 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 添加了几个子视图,没什么特别的。为什么会这样?自动释放池不应该清理使用的内存吗?

4

1 回答 1

0

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

于 2012-08-29T12:58:41.450 回答