我想在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
任何想法。非常感谢任何帮助或指导。
答案 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