我们尝试使用UIView.layer的renderInContext方法创建多个pdf文件
以下代码在autoreleasepool中运行。
---loop
UIGraphicsBeginPDFContextToFile(documentDirectoryFilename, CGRectZero, nil);
UIGraphicsBeginPDFPage();
CGContextRef pdfContext = UIGraphicsGetCurrentContext();
[view.layer renderInContext:pdfContext];
view =nil;
pdfContext =nil
UIGraphicsEndPDFContext()
--loop ends
经过几次迭代后,驻留内存增加到20 mb,随后的迭代会增加使用的总内存。
一些ARC如何释放用于渲染pdf的内存,因此应用程序崩溃时内存不足。
应用程序正在使用ARC
非常感谢任何解决问题的帮助或指示。
由于
更新: 感谢您的快速回复。
我对伪代码中的拼写错误道歉。 以下是测试项目的示例代码。
-(BOOL)addUIViewToPDFFile:(UIView*)view newBounds:(CGRect)newBounds pdfFile:(NSString*)pdfFile{
BOOL retFlag =YES;
NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString* documentDirectory = [documentDirectories objectAtIndex:0];
NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:pdfFile];
UIGraphicsBeginPDFContextToFile(documentDirectoryFilename, CGRectZero, nil);
CGContextRef pdfContext = UIGraphicsGetCurrentContext();
if([NSThread isMainThread]){
NSLog(@"Main Thread");
}else{
NSLog(@"Not in Main Thread");
}
UIGraphicsBeginPDFPage();
logMemUsage1();
[view.layer renderInContext:pdfContext];
UIGraphicsEndPDFContext();
pdfContext = nil;
logMemUsage1();
return retFlag;
}
- (IBAction)createPdf:(id)sender {
for(int i=0;i<10;i++){
@autoreleasepool {
PDFViewController *vc = [[PDFViewController alloc] init];
[vc loadView];
NSString *PdfFileName =[ NSString stringWithFormat:@"TestPdf%d.pdf",i ];
[self addUIViewToPDFFile:vc.view newBounds:self.view.frame pdfFile:PdfFileName];
vc = nil;
}
} }
还有一点需要补充的是,当应用程序按下硬件主页按钮进入后台并再次回到前台时,内存似乎被清除并释放。
我希望每次迭代后都应该释放用于创建pdf的内存。