【问题标题】:iOS - Activity monitor shows a leak, even after object is releasediOS - 活动监视器显示泄漏,即使在对象被释放后
【发布时间】:2012-08-16 09:35:53
【问题描述】:

请看附上的图片。 如果它在这里不可见是代码

- (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];
}

仍然存在泄漏。

【问题讨论】:

  • 你也可以发布委托方法吗?解析调用中的某些内容存在未正确清理的元素。它应该在委托方法内
  • 你是对的。我在那里看到一些分配的字符串,它们没有被释放。我将释放它们并再次检查。

标签: iphone ios xcode ipad memory-leaks


【解决方案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?

【讨论】:

  • 但就我而言,我没有使用 URL,而是传递 NSData 对象。任何想法,如何处理这种情况。或者它是一个错误?
  • 我想它应该与你的 init 一样。最主要的可能是他缓存了一些数据,但在您再次使用此解析器时从未销毁,从而造成泄漏。
  • 你是对的。我在那里看到一些分配的字符串,它们没有被释放。我将释放它们并再次检查
猜你喜欢
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 2011-12-17
  • 2011-04-27
  • 2015-06-24
相关资源
最近更新 更多