我正在使用以下代码在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不应该清理已用过的内存吗?
答案 0 :(得分:0)
PDF文件完全在内存中创建,并在调用UIGraphicsEndPDFContext时写入磁盘。如果PDF文件变得非常大,这会导致内存问题。