我使用NSXMLParser來解析XML文檔。我有以下功能(其中包括):XML解析器中的內存泄漏
- (void) parserDidStartDocument:(NSXMLParser *)parser {
// Init tempString
tempString = [NSMutableString string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
// save gained data for element "date"
if ([elementName isEqualToString:@"date"])
[entryDict setObject:[tempString copy] forKey:kXMLDictDateKey];
[tempString setString:@""];
}
//
// Character Handling
//
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
[tempString appendString:[[XMLParser alloc] stripUnwantedStringChars:string]]; //Just strips tabs and linebreaks and the returns the string
}
tempString是一個實例變量具有以下屬性:
@property (nonatomic, retain) NSMutableString *tempString;
tempString不具有的dealloc釋放,因爲它是一個方便的啓動方法,因此它會自動分配給自動釋放池。我也用alloc,init方法嘗試了以下,但結果相同。所以這裏是我做的:
1.)用儀器運行我的項目,讓它在啓動後立即搜索泄漏,沒有。 2.)運行一次XML解析器,檢查泄漏。沒有了。 3.)再次運行XML解析器,現在突然與[entryDict setObject:[tempString copy] forKey:kXMLDictDateKey];
一行泄漏。
我一直在尋找這些內存泄漏現在幾個小時,我忘了什麼?如果你需要更多的代碼,請讓我知道,但我認爲我的問題在這些方面。
Ps。我的檢查表明,解析器(委託)之間調用「dealloc」方法被調用,因此我認爲解析器真的被加載了兩次,而不是一次。
非常感謝,這是我錯過的東西。現在它就像一個魅力:) – Robin