CGPDFDocumentCreateWithURL ARC内存泄漏

时间:2012-10-15 08:17:26

标签: objective-c ios pdf memory-leaks core-graphics

我想在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负责。 stacktrace中包含CGPDFDocumentCreateWithURL。泄漏意味着在没有所有者的情况下存在物体。

我创建了一个带有问题复制的git仓库: https://github.com/indika/PDFLeaks

任何想法。非常感谢任何帮助或指导。

2 个答案:

答案 0 :(得分:1)

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

1)将resourceRef桥接到ARC,不更改所有权(仍由ARC拥有)

2)CFRelease上的resourceRef

3)ARC还发布了resourceRef

您不需要第2步

这不是内存泄漏,而是过度发布。

答案 1 :(得分:0)

我犯了很多错误,尤其是双重释放文档参考。然而,在我的情况下,这不是真正的生物。

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

pdftk original output destination