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 はいくつかのサブビューを追加しますが、特別なことは何もありません。なぜこうなった?autoreleasepool は使用済みメモリをクリーンアップすべきではありませんか?

4

1 に答える 1

0

PDF ファイルは完全にメモリ内に作成され、UIGraphicsEndPDFContext が呼び出されるとディスクに書き込まれます。PDF ファイルが非常に大きくなると、メモリの問題が発生します。

于 2012-08-29T12:58:41.450 に答える