菜鸟教程小白 发表于 2022-12-12 10:57:59

ios - 显示 pdf 图像时 Core Graphics 内存泄漏


                                            <p><p>我有一个加载 pdf 图像数据的 UIImageViewView 的子类,因此我可以在我的 View 中拥有与分辨率无关的图形。对于既定目的效果很好,但是根据仪器泄漏配置文件,我会因此而发生内存泄漏。 </p>

<p>下面是我认为应该对泄漏负责的代码。我正在努力追查问题,但我对如何查明问题有点模糊。 </p>

<pre><code>- (id)initWithPDFResourceAtPath:(NSString *)path center:(CGPoint)center {
    if ((self = )){
      CGPDFPageRelease(pageRef);
      CGPDFDocumentRef documentRef = CGPDFDocumentCreateWithURL((__bridge CFURLRef));
      pageRef = CGPDFDocumentGetPage(documentRef, 1);
      CGPDFPageRetain(pageRef);
      CGPDFDocumentRelease(documentRef);
      ;
    }
    return self;
}

-(void)setBounds {
    ;
    size = self.bounds.size;
    ;
}

-(void)getPDFimage {
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextScaleCTM(context, scaleH, scaleV);
    CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
    CGContextSetRenderingIntent(context, kCGRenderingIntentDefault);
    CGContextDrawPDFPage(context, pageRef);
    ;
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您忘记调用 <code>UIGraphicsEndImageContext()</code>。将您的代码更改为:</p>

<pre><code>UIImage *image = ;
UIGraphicsEndImageContext();
return image;
</code></pre>

<p>EDIT1:您的代码有这个 pageRef 变量 - 它是 ivar 还是静态变量?如果是 ivar,最好在 dealloc 方法中使用 CGPDFPageRelease() 释放它。 [确实应该是ivar]</p>

<p>EDIT2:请参阅附加的对象分配屏幕截图。您可以看到类型和当前数量及其从多到少的顺序。</p>

<p> <img src="/image/l8hcP.jpg" alt="enter image description here"/> </p>

<p>EDIT3:所有其他方法都失败了,创建一个有同样问题的演示项目并将其发布到 Dropbox。</p>

<p>EDIT4:代码上传到:<a href="http://owolf.net/uploads/StackOverflow/StampsTest-transparency.zip" rel="noreferrer noopener nofollow">here</a> (我要到 5 月 28 日才能看到它)</p>

<p>EDIT5:问题是 pageRef 从未发布过。所以:</p>

<p>1) 从您的 init 方法中删除它,因为它什么都不做:</p>

<pre><code>CGPDFPageRelease(pageRef);
</code></pre>

<p>2 并将其移至新的 dealloc 方法:</p>

<pre><code>- (void)dealloc
{
    CGPDFPageRelease(pageRef);
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 显示 pdf 图像时 Core Graphics 内存泄漏,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/16565561/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/16565561/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 显示 pdf 图像时 Core Graphics 内存泄漏