繁体   English   中英

DDXML解析器中的内存泄漏

[英]Memory leak in DDXML parser

我从Internet加载数据,并在另一个线程中使用DDXML解析器解析它。 这是代码(回调connectionDidFinishLoading:进入后台线程,我在后台线程调度URLConnection):

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"connection did finish load");
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    DDXMLDocument *xdoc = [[DDXMLDocument alloc] initWithData: receivedXmlData options:0 error: NULL];
    NSLog(@"document retainCount1 = %d", [xdoc retainCount]);
    NSArray *nodes = [xdoc selectNodes: @"./items/item"];
    NSLog(@"document retainCount2 = %d", [xdoc retainCount]);
    for (DDXMLElement *tabXmlItem in nodes)
    {
        // here is the parsing
    }
    NSLog(@"document retainCount3 = %d", [xdoc retainCount]);
    [xdoc release];
    [receivedXmlData setLength:0];
    [pool drain];
    [pool release];
}

我在内存分配器中看到:DDXMLDocuments,DDXMLNodes,DDXMLElements在解析结束后仍然存在。 所以,内存中有大量的CFString和CFData。 为什么不清除这些物体? 也许,我错误地使用自动释放池或DDXML解析器是惊喜吗?

retainCount没用。 别叫它。 http://whentouseretaincount.com/

无需drainrelease游泳池; 只是把它drain

更好的是,在池的范围内使用@autoreleasepool {...}

由于您使用的是分配工具,请启用“跟踪参考计数”。 然后,您可以查看粘附的对象的保留/释放历史,并查看它们仍然存在的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM