XML 문서를 구문 분석하는 데 NSXMLParser를 사용합니다. 그것이 편리 시작으로 할당 해제에 출시 될XML 구문 분석기의 메모리 누수
@property (nonatomic, retain) NSMutableString *tempString;
tempString가 없습니다 :
- (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는 다음과 같은 속성 인스턴스 변수입니다 : 내가 (다른 사람의 사이에서) 다음과 같은 기능을 가지고 있습니다 메소드가 자동으로 자동 해제 풀에 할당됩니다. 나는 또한 같은 결과를 가지고 alloc, init 접근법으로 다음을 시도했다. 그래서 내가 한 일이 여기에 있습니다 :
1) 악기로 프로젝트를 실행하고, 시작 직후에 누출을 찾게하십시오. 아무 것도 없습니다. 2.) XML 파서를 한 번 실행하고 누출 여부를 확인하십시오. 아무도 없다. 3.) XML 파서를 다시 실행하십시오. 갑자기 [entryDict setObject:[tempString copy] forKey:kXMLDictDateKey];
이있는 행이 유출되었습니다.
나는 몇 시간 동안 이러한 메모리 누출을 조사해 왔지만, 무엇을 잊었나요? 더 많은 코드가 필요하면 저에게 알려주십시오. 제 문제는이 줄의 어딘가에 있다고 생각합니다.
ps. 내 검사는 파서 (델리게이트) 호출간에 "dealloc"메서드가 호출된다는 것을 보여 주므로 파서가 실제로 한 번만 두 번로드되는 것 같습니다.
고마워, 이것이 내가 놓친 것이었다. 이제는 매력처럼 작동합니다. – Robin