次のコードを使用して、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 は使用済みメモリをクリーンアップすべきではありませんか?