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]