업데이트 : 누설 도구가 [parser parse];
의 첫 번째 호출을 가리키는 동안이 호출을 두 번째로 수행 할 때만 누수가 발생한다는 것을 확인했습니다. NSXMLParser 클래스 참조 또는 설명서에서 아무것도 다시 구문 분석 할 수 없다는 것을 알 수 없습니다. 내가 놓친 게 있니? 문서를 파싱 할 때마다 새 NSXMLParser를 만들어야합니까?두 번째 구문 호출에서 NSXMLParser 메모리 누수가 발생했습니다.
현재 iPhone 응용 프로그램 용 코드를 파싱하는 XML에서 누출을 추적하려고합니다. NSXMLParser를 사용하여 누수에 대한 다른 게시물을 검색했지만 사용할 수있는 답변을 찾지 못해서 도움을 주시면 감사하겠습니다.
NSData* data = [NSData dataWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"collisionGraph" ofType: @"graphml"]];
NSXMLParser* parser = [[[NSXMLParser alloc] initWithData: data] autorelease];
[parser setDelegate:self];
[parser parse]; <<<<< leak here according to Leaks
self.currentPass++;
...
[parser parse];
self.currentPass++;
내가 내 대리인 콜백 메소드에서 코드를 모두 제거하지만, 이것은 누출을 멈추지 않았다 :
는 악기 누수 도구는 다음 코드에서 누출을 감지한다. 여기
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict
{
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
}
(나는 이미지를 게시 할 수있는 담당자가 없기 때문에 연결) 악기
http://i22.photobucket.com/albums/b311/Erithil/ParserLeak.png에서보기입니다.
저는 정말이 문제에 곤란을 겪었습니다. 미리 감사드립니다.
NSXMLParser 객체에서 release는 어디에서 호출합니까? 디버거 또는 로깅 문을 사용하여 릴리스를 호출하는 코드가 실제로 실행되고 있는지 확인할 수 있습니까? - [NSXMLParser parse]는 파서가 할당 해제 될 때 정리가 필요한 메모리를 할당 할 수 있습니다. – Ryan
@ 라이언 고마워 라이언. 필자의 동료 중 한 명은 autorelease 풀이 적시에 릴리스되지 않을 수 있기 때문에 파서가 누출되었을 수도 있다고 제안했습니다. 필자는 'autorelease'호출을 '[parser release]'호출로 대체하여 테스트했습니다. 방법의 끝에서. 디버거를 사용하여 릴리스 콜이 진행되고 있음을 확인했습니다. 그럼에도 불구하고 누출은 여전히 존재했다. 나는 – Dan