0

我想在 iOS 上渲染 PDF,当我调用CGPDFDocumentCreateWithURL()时出现内存泄漏。我知道这个问题之前已经讨论过,但我不知道我的情况是否不同,因为我使用的是 ARC。

通过在我的 viewDidLoad 上运行以下代码,我提取并简化了问题:

// Bridge resourceRef to ARC with no ownership change (still owned by ARC)
CFURLRef resourceRef = (__bridge CFURLRef) [NSURL fileURLWithPath:htmlPath];

CGPDFDocumentRef pdf;
pdf = CGPDFDocumentCreateWithURL(resourceRef);
CGPDFDocumentRelease(pdf);

// Do not need to release resourceRef because ARC will release it

Instruments 告诉我泄漏的对象是一个 Malloc 48 字节,由 CoreGraphics 负责。堆栈跟踪中有 CGPDFDocumentCreateWithURL 。泄漏意味着存在没有所有者的对象。

我已经创建了一个复制问题的 git repo: https ://github.com/indika/PDFLeaks

有任何想法吗。将不胜感激任何帮助或“指针”。

4

2 回答 2

1

resourceRef 将被过度释放。看看你在做什么。

1) 与 ARC 的桥接resourceRef,没有所有权变更(仍归 ARC 所有)

2)CFReleaseresourceRef

3) ARC 也发布resourceRef

您不需要第 2 步

这不是内存泄漏,而是过度释放。

于 2012-10-15T08:22:47.330 回答
0

我犯了很多错误,尤其是在双重发布文档参考时。然而,在我的情况下,这并不是真正的小动物。

我正在加载一个损坏的 PDF!我正在使用 pdftk 对 pdf 文档进行切片和合并,并且我正在破坏索引。所以请记住,在将 PDF 与 pdftk 合并后,使用以下命令修复文件:

pdftk original output destination
于 2012-10-17T13:08:10.597 回答