【问题标题】:iPhone: Memory leak in this code?iPhone:这段代码中的内存泄漏?
【发布时间】:2010-12-14 13:35:17
【问题描述】:

我在代码中使用了两个对象,即 pagesUrl 和 pagesXmlParser,在它们使用之后,我释放了这两个对象。它运行良好,但在内存泄漏中显示它们。当我试图验证它时,我检查了这些对象的引用计数及其显示“1”,即使在对象被释放后也是如此。谁能帮我解决如何消除泄漏以及如何在以下代码中释放这些特定对象。

-(void)loadPagesForChapter:(NSString *)path{
// have to parse the pages xml for this chapter

  NSURL *pagesUrl = [[NSURL alloc] initFileURLWithPath:[self pagesXmlPath:path]];

  NSXMLParser *pagesXmlParser = [[NSXMLParser alloc] initWithContentsOfURL:pagesUrl];

  PagesAccumulator *pageLoader = [[PagesAccumulator alloc] init];
  pagesXmlParser.delegate = pageLoader;

  [pagesXmlParser parse];

// parsing pages done
// get the pages array
self.arrayOfPages = pageLoader.arrayOfPages;

    [pageLoader release];
[pagesXmlParser release];
[pagesUrl release];
NSLog(@"pagesurl retain count is:%d",[pagesUrl retainCount]);
    NSLog(@"pagesxmlparser retain count is:%d",[pagesXmlParser retainCount]);
}

提前感谢您的帮助。

【问题讨论】:

  • 设备或模拟器中的泄漏 - 如果是模拟器中的泄漏,请在设备上进行测试 - 模拟器有时会给您错误的结果!

标签: iphone objective-c ipad


【解决方案1】:

忽略保留计数

仅仅因为一个对象的保留计数 > 0 并不意味着它也不会自动释放:)

你的代码在我看来不错。

如果这真的是泄漏,我会查看您的 PageLoader 实现,看看是否存在阻止解析器被释放的 NSXMLParserDelegate 方法之一的保留(这也会导致 URL 泄漏)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    相关资源
    最近更新 更多