2011-06-13 91 views
-1

看起來這段代碼中存在內存泄漏。我正在使用它來解析XML數據。在NSXML解析器中泄漏

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName 
attributes:(NSDictionary *)attributeDict 
{ 
currentElement = [[elementName copy]autorelease]; 
if ([elementName isEqualToString:@"value1"]) { 
    self.currentString =[NSMutableString string]; 
} 


else if ([elementName isEqualToString:@"value2"]) { 
    self.currentStringName =[NSMutableString string]; 
} 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
if ([currentElement isEqualToString:@"value1"]) { 
    [currentString appendString:string]; 
} 

else if ([currentElement isEqualToString:@"value2"]) { 
    [currentStringName appendString:string]; 
} 

} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 

if ([elementName isEqualToString:@"value1"]) { 

    } 
    else if ([elementName isEqualToString:@"value2"]) 
    { 
    } 

回答

1

您可能想對「NSXMLParser leak」風格進行一點研究。像SDK的其他部分一樣,NSXMLParser是一個破碎的大壩。我沒有看到你的代碼(之後,我必須說,非常快速地看一眼)任何泄漏...我的意思是比較你會發現在NSXMLParser。不幸的是,你無法對他們做任何事情。

所以,基本上,如果儀器,例如,報告與您的代碼泄漏,不要羞愧:NSXMLParser is responsible

如果有機會,不要猶豫,以保持對你創建的對象(並避免autorelease),在我看來管理起來更容易(但是......有些人可能不同意!)。

+1

+1以上沒有泄漏,但我也聽說NSXMLParser本身泄漏的報告相當糟糕。 – 2011-06-13 03:55:27

0

嘗試使用其他XML解析器,如touchXML或KissXML。 NSXML Parser在框架內部有泄漏。