2011-03-01 6 views
0

내 프로젝트에서 메모리 누수를 없애려고하고 있지만 지금은 며칠 동안 2 가지 상황에 빠져 있습니다.xcode 프로젝트 - 메모리 누수

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 

    if (currentElement) { 
     [currentElement release]; 
     currentElement = nil; 
    } 
    currentElement = [elementName copy]; 

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

     item = [[NSMutableDictionary alloc] init]; //leak #1 

     // DOING OTHER STUFF.... 
     //...................... 
    } 

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

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

     [item setObject:currentTitle forKey:@"title"]; // leak #2 
     [item setObject:currentLink forKey:@"link"]; //leak #3 

     [bucket addObject:[item copy]]; // NSMutableArray *bucket 
    } 
} 

누수 1에 대해서는 메모리 할당 직전에 항목을 릴리스하려고 시도했지만 앱을 중단하면 시도가 중단되었습니다. (내 말은, 단지 이전 item = [[NSMutableDictionary alloc] init]; 내가() 메소드가, 나 또한 내가 무슨 일이 일어나고 있는지 아무 생각이 누출 # 2, # 3의 [item release];

이 내의 dealloc에서

if (item){ 
    [item release]; 
    item=nil; 
} 

을 사용 참고 :. 2 개의 XML 파일을 구문 분석하는 동안 방법은 XML 파서에 의해 호출되어, 요소가 read.That이며, NSMutableDictionary *이 항목이 모든 요소에 대해 다시 사용 할 때마다. 어떤 제안

은? 사전 :

답변

0
에 감사드립니다

유전자 알 수 있듯이 copy, retain, alloc 또는 new의 경우 release이어야합니다. 나는 당신이 [[item copy] autorelease]에 전화해서 당신이 가지고있는 앞의 수표를 제거 할 수 있다고 생각합니다.

아무런 문제가 해결되지 않으면 if(item) 대신 item != nil을 확인해보십시오.

또한 빌드 메뉴에서 "빌드 및 분석"과 "NSZombie"라는 두 가지 다른 도구를 사용하여 다른 메모리 누수를 찾아보십시오. 또한, 누출의 원인이되는 라이브러리를 확인하려면 누출 부위 인스투멘 테이를 사용하십시오. Apple 또는 귀하의 것일 수 있습니다. 귀하의 것이면 누수가 그것을 확인하는 데 도움이 될 것입니다. 그렇지 않으면 문제가 아닙니다.

+0

먼저 답장 해 주셔서 감사합니다. 나는 이미 아이템을 자동으로 꺼내려고했으나 여전히 누수가 발생했다. 빌드 및 분석을 사용하면 모든 것이 정상임을 나타냅니다. – CrisDeBlonde

+0

수표가 손상된 것 같습니다. if (item) 대신'item! = nil'을 검사 해보십시오. – Moshe

+0

당신은 나에게 직접 해결책을주지 못했지만 당신은 NSZombie를 사용해야 만했다. 그것은 나에게 길을 보여 줬다! 감사합니다 :) – CrisDeBlonde