2010-11-14 59 views
0

我在iOS 4上开发,并且我的appDelegate中有这个方法。它由几个tableviews数据源代表调用。仪器给我这些(在设备和模拟器上) Malloc 512字节,Malloc 512字节,NSConcreteMapTable(基金会)。 Mallocs没有显示任何负责任的图书馆。当方法返回对象时iPhone内存泄漏

这里的返回对象的方法:

- (NSXMLParser *) getXmlParserFrom:(NSString *)remoteFile andCacheToFile:(NSString *) fileName forceRefresh:(BOOL) doRefresh { 
    NSXMLParser *xmlParser; 

    //FIRST TRY TO LOAD THE XML FROM CACHED FILE 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName]; 

    NSString *xmlDocumentFromCache = [[NSString alloc] initWithContentsOfFile:filePath]; 

    if (xmlDocumentFromCache && !doRefresh) { 
     NSData *xmlData = [NSData dataWithContentsOfFile:filePath]; 
     xmlParser = [[NSXMLParser alloc] initWithData:xmlData]; 
    } else { 
     NSURL *xmlFileURL = [NSURL URLWithString:remoteFile]; 
     NSString *contentsOfRemoteFile = [NSString stringWithContentsOfURL:xmlFileURL]; 

     //CACHE THE FILE 
     BOOL cacheResult = [contentsOfRemoteFile writeToFile:filePath atomically:YES]; 
     xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlFileURL]; 
    } 
    [xmlDocumentFromCache release]; 

    return [xmlParser autorelease]; 
} 
+0

Dup of [NSXMLParser Leaking](http://stackoverflow.com/questions/1598928/nsxmlparser-leaking)。基本上,这是NSXMLParser中的一个错误(#6469143)。应该在即将推出的iOS版本中修复。检查解决方法的链接问题的答案。另请阅读iPhon Dev上的[“NSXMLParser * rssParser导致内存泄漏”](http://www.iphonedevsdk.com/forum/iphone-sdk-development/4910-nsxmlparser-rssparser-causing-memory-leak.html) SDK。使用谷歌搜索“NSConcreteMapTable NSXMLParser”可以找出bug上的其他页面。 – outis 2010-11-14 10:59:17

回答

0

我只是通过使用this post概述的方法解决了这个问题。

这是一个解决方法,但它的工作原理。

另一方面,我发现仪器在Lion/Xcode 4.1中可靠地工作,如果你总是在设备上运行它,而不是模拟器。在模拟器上,似乎有一个附加在过程上的魔鬼。