的NSXMLParser漏水(NSXMLParser Leaking)

2019-08-22 18:29发布

我有以下的代码泄漏。 仪器说,这是泄漏rssParser对象。 我“刷新” XML饲料,它运行在块和它泄漏....

file.h

@interface TestAppDelegate : NSObject <UIApplicationDelegate> {

    NSXMLParser *rssParser;

}

file.m

NSData *data = [ NSURLConnection sendSynchronousRequest:request returningResponse: nil error: nil ];
    rssParser = [[NSXMLParser alloc] initWithData:data];
    [rssParser setDelegate:self];
    [rssParser setShouldProcessNamespaces:NO];
    [rssParser setShouldReportNamespacePrefixes:NO];
    [rssParser setShouldResolveExternalEntities:NO];
    [rssParser parse];
    [rssParser release];

泄漏的图像....

替代文字http://www.shipfinder.co.uk/images/memoryleak.png

Answer 1:

苹果已经回来给我,这是一个bug#6469143

看起来他们计划修为4.0



Answer 2:

最可能的原因是,你的委托方法之一保留解析器。 你是否在委托方法解析器参数做什么?

你得到你每次刷新时泄漏?

如果这是唯一的地方rssParser使用,你为什么做它伊娃? 如果您确实需要伊娃,我不能强调不够是多么的重要,始终使用他们的存取,从不直接访问它们。 以避免内存泄漏的最好方法是使用存取你的高德。

而且,如果不立即将其设置为别的东西(通常是零)从未释放的东西。 以上你rssParser的释放是一个等待发生,因为你现在有一个指向可能未分配的内存崩溃。



Answer 3:

看来这是一个众所周知的问题。 看到这里NSURLConnection的泄漏 。 但是,如果你设置以下之前初始化解析器泄漏停止:

[[NSURLCache sharedURLCache] setMemoryCapacity:0];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
NSXMLParser *parser = [[NSXMLParser alloc]initWithContentsOfURL:URL];


Answer 4:

我只是用概括的方法解决了这个这个职位 。

这是一个解决办法,但它的工作原理。

在另一方面,我发现,仪器工作可靠Lion中/ Xcode的4.1,如果你总是在设备上运行,而不是在模拟器。 在模拟器上,它似乎有一个时间连接到过程中的魔鬼。

该实施的NSXMLParser似乎是自然泄漏。 有来自该库在我的应用程序的其他地方,我需要看看我是否能牵制未来另一泄漏。 这是一个非同步调用,这种解决方案似乎并没有对这项工作。



文章来源: NSXMLParser Leaking