我在代码中使用了两个对象,即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]);
}
提前感谢您的任何帮助。
答案 0 :(得分:4)
忽略保留计数
仅仅因为一个对象有一个保留计数> 0并不意味着它也没有自动释放:)
您的代码对我来说很好。
如果它确实是泄漏,我会查看你的PageLoader实现,看看是否有一个NSXMLParserDelegate方法中的保留阻止解析器被释放(这也会导致URL泄漏)。