菜鸟教程小白 发表于 2022-12-12 13:18:01

ios - Core Graphics iOS 中的内存增加/泄漏


                                            <p><p>
我有一个 UIViewController,里面有一个自定义的 UIView。这个自定义 UIView 使用 <code>drawRect</code> 和 CoreGraphics 绘制一个 pdf。 UIViewController (pdfViewController) 被多次加载:</p>

<pre class="lang-c prettyprint-override"><code> initWithPDF:pdfs uiColor:]]];
</code></pre>

<p>自定义 UIView 如下所示:</p>

<pre class="lang-c prettyprint-override"><code>- (void)drawRect:(CGRect)rect
{
    ;

   NSString *documentsDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
   NSURL *url = ];

   // Get GraphicsContext
   CGContextRef ctx = UIGraphicsGetCurrentContext();

      // Open PDF Document
      CGPDFDocumentRef pdfDocument =CGPDFDocumentCreateWithURL((CFURLRef)url);
      CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdfDocument, Page);

            // Get PDF Dimensions
            CGRect cropRect = CGPDFPageGetBoxRect(pdfPage, kCGPDFCropBox);

            // Set white background
            CGContextSetRGBFillColor(ctx, 255.0, 255.0, 255.0, 1.0);
            CGContextFillRect(ctx, rect);

            // Flip Coordinates and reset Origin
            CGContextGetCTM(ctx);
            CGContextScaleCTM(ctx, 1, -1);
            CGContextTranslateCTM(ctx, 0, -rect.size.height);

            // Set render quality
            CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh);

            // Scale Matrix
            CGContextScaleCTM(ctx, rect.size.height/cropRect.size.height,rect.size.height/cropRect.size.height);
            CGContextTranslateCTM(ctx, -cropRect.origin.x, -cropRect.origin.y);

            // Draw PDF
            CGContextDrawPDFPage(ctx, pdfPage);

      CGPDFPageRelease(pdfPage);
      CGPDFDocumentRelease(pdfDocument);

}
</code></pre>

<p>内存没有被释放,每次加载 UIView 时,UIViewController 内存都会增加 ca。 6MB:/</p>

<p>这是内存使用情况的图片:<img src="/image/Fi2ur.png" alt="enter image description here"/> </p>

<p>任何帮助将不胜感激,请随时询问更多信息</p>

<p><strong>更新:</strong>
<code>drawRect</code> 中的 UIViews 手动内存管理非常好。由于(强)委托(delegate)引用,UIView 本身没有释放自己。再次感谢所有答案</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>听起来 UIView 本身没有被释放。 (既然我们在评论中弄清楚了,不妨填写答案。)</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - Core Graphics iOS 中的内存增加/泄漏,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/27462642/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/27462642/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - Core Graphics iOS 中的内存增加/泄漏