UIView层renderInContext内存未被释放

时间:2013-04-17 20:11:04

标签: memory-management crash pdf-generation automatic-ref-counting calayer

我们尝试使用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的内存。

0 个答案:

没有答案