gpt4 book ai didi

iOS泄漏工具CGContextDrawPDFPage

转载 作者:行者123 更新时间:2023-11-29 13:36:44 25 4
gpt4 key购买 nike

我知道这个问题已经被问过好几次了,但我无法针对我的具体情况解决它。 CGContextDrawPDFPage 被指示为泄漏仪器中的泄漏。此外,当这段代码运行时,应用程序崩溃了,我确定这是由于内存问题。

    pdfURLDocument = [[NSURL alloc] initFileURLWithPath: [docsDir stringByAppendingPathComponent:documentName]];
pdfDocument = CGPDFDocumentCreateWithURL((CFURLRef)pdfURLDocument);
[pdfURLDocument release];

page = CGPDFDocumentGetPage(pdfDocument, 1);
CGPDFPageRetain(page);

// determine the size of the PDF page
CGRect pageRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
pdfScaleWidth = (1/((CGFloat) gridSizeDocument)) * self.frame.size.width/pageRect.size.width;
pdfScaleHeight = (1/((CGFloat) gridSizeDocument)) * self.frame.size.height/pageRect.size.height;
pageRect.size = CGSizeMake(pageRect.size.width*pdfScaleWidth, pageRect.size.height*pdfScaleHeight);


// Create a low res image representation of the PDF page
UIGraphicsBeginImageContext(pageRect.size);
CGContextRef context = UIGraphicsGetCurrentContext();

// First fill the background with white.
CGContextSetRGBFillColor(context, 1.0,1.0,1.0,1.0);
CGContextFillRect(context,pageRect);

CGContextSaveGState(context);
// Flip the context so that the PDF page is rendered
// right side up.
CGContextTranslateCTM(context, 0.0, pageRect.size.height);
CGContextScaleCTM(context, 1.0, -1.0);

// Scale the context so that the PDF page is rendered
// at the correct size for the zoom level.
CGContextScaleCTM(context, pdfScaleWidth, pdfScaleHeight);
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
CGContextSetRenderingIntent(context, kCGRenderingIntentDefault);
CGContextDrawPDFPage(context, page);
CGContextRestoreGState(context);

backgroundImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();
CGPDFPageRelease(page);

另外,我包括了 CGPDFPageRelease(page);在 dealloc 方法中。此外,补充一点可能会有所帮助:它适用于小文档,但只会在大文档上崩溃。但是,内存泄漏仍然存在于较小的内存中。

最佳答案

我知道这是一个老问题,但有两个观察结果:

  1. 您需要发布您的pdfDocument:

    CGPDFDocumentRelease(pdfDocument);
  2. 不过,您应该使用CGPDFPageRelease(page) 释放page,因为那是一个自动释放的对象,您不需要' 拥有它(当然,除非您使用 CGPDFPageRetain 保留了它)。

如果您使用静态分析器(Xcode 的“产品”菜单上的“分析”),它应该指出这两个问题。

根本问题是 CGContextDrawPDFPage 在 6.0 之前的 iOS 版本中泄漏。

关于iOS泄漏工具CGContextDrawPDFPage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10395017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com