2012-08-16 29 views
0

请参阅附加的图像。 如果它不是在这里看到的是代码iOS - 活动监视器即使在释放对象后也会显示泄漏

- (void)startParsingData:(NSString *)xmlDataString 
{ 
    NSLog(@"parser started"); 
    // allocate NSXMLParser 
    NSLog(@"XML DATA equals %@", xmlDataString); 
    NSData* xmlData=[xmlDataString dataUsingEncoding:NSUTF8StringEncoding]; 
    dataParser = [[NSXMLParser alloc] initWithData:xmlData]; 
    // assign delegate to parser 
    dataParser.delegate = self; 
    // parse data 
    [dataParser parse]; 
    // release parser 
    [dataParser release]; 
    // release data 
    //[xmlData release]; 
} 

活动监视器显示有泄漏以下行 -

[dataParser parse]; 

我不明白。为什么?因为我已经发布了这个对象。

编辑:

我改变了方法 -

- (void)startParsingData:(NSString *)xmlDataString 
{ 
    NSLog(@"parser started"); 
    // allocate NSXMLParser 
    NSLog(@"XML DATA equals %@", xmlDataString); 
    NSData* xmlData=[xmlDataString dataUsingEncoding:NSUTF8StringEncoding]; 
    [[NSURLCache sharedURLCache] setMemoryCapacity:0]; 
    [[NSURLCache sharedURLCache] setDiskCapacity:0]; 
    dataParser = [[NSXMLParser alloc] initWithData:xmlData]; 
    // assign delegate to parser 
    dataParser.delegate = self; 
    // parse data 
    [dataParser parse]; 
    // release parser 
    [dataParser release]; 
    // release data 
    //[xmlData release]; 
} 

仍泄漏是存在的。

enter image description here

+1

您可以发布委托方法还有吗?调用内部的某些内容会解析出没有被正确清理的元素。它应该在委托方法 – 2012-08-16 10:02:11

+0

内你是对的。我看到一些分配的字符串,这些字符串没有被释放。我会释放他们并再次检查。 – 2012-08-17 05:19:31

回答

1

尝试使用:

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

它似乎停止了对这些问题的人泄漏:

Got memory leak problem when i used NSXMLParser same as SeismicXML Example

Can't find the leak in this Objective-C NSXMLParser code?

+0

这真的有用的信息Totumus。 – 2012-08-16 09:49:37

+0

但在我的情况下,我不使用URL,而是传递NSData对象。任何想法,如何在这种情况下处理。或者它是一个错误? – 2012-08-16 09:50:24

+0

它应该与你的init相同的方式,我想。最主要的可能是他有一些数据缓存,但是一旦你再次使用这个解析器就不会破坏数据,从而造成泄漏。 – 2012-08-16 09:51:12

相关问题