2010-08-02 6 views
0

저는 지금 XML 파서가 누출되지 않고 효율적으로 작동하지만 지금까지 성공하지 못했습니다. 추가 필드는 모두 동일하므로 제거했습니다.누출 XMLParser 문제

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 
    currentElement = [[elementName copy] autorelease]; 
    if ([elementName isEqualToString:@"source"]) { 
     if (!currentID) { 
      overlays = [[NSMutableArray alloc] init]; 
      currentID = [[NSMutableString alloc] init]; 
     } else { 
      [currentID release]; 
      currentID = nil; 
      currentID = [[NSMutableString alloc] init]; 
     } 
    } 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 
    if ([elementName isEqualToString:@"source"]) { 
     overlay = [[NSMutableDictionary alloc] init]; 
     [overlay setObject:currentID forKey:@"id"]; 
     [overlays insertObject:overlay atIndex:[overlays count]]; 
     [overlay release]; 
     overlay = nil; 
    } 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
    string = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""]; 
    string = [string stringByReplacingOccurrencesOfString:@"\t" withString:@""]; 
    if ([currentElement isEqualToString:@"id"]) { 
     [self.currentID appendString:string]; 
    } 
} 

- (void)parserDidEndDocument:(NSXMLParser *)parser { 
    [currentID release]; 
    currentID = nil; 
    //[self addResources]; 
} 

어떤 도움을 주시면 감사하겠습니다.

답변

1

귀하의 ivars에 대한 속성을 선언했다면 사용을 권장합니다. 이것은 메모리 관리를 더 쉽게 만듭니다. 또한 & 당신의 코드를 분석 빌드 시도 할 수도

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 
    self.currentElement = elementName; 
    if ([elementName isEqualToString:@"source"]) { 
     if (!self.currentID) { 
      self.overlays = [NSMutableArray array]; 
      self.currentID = [NSMutableString string]; 
     } else { 
      self.currentID = [NSMutableString string]; 
     } 
    } 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 
    if ([elementName isEqualToString:@"source"]) { 
     [self.overlays addObject: 
     [NSDictionary dictionaryWithObjectsAndKeys:self.currentID,@"id",nil]]; 
    } 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
    string = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""]; 
    string = [string stringByReplacingOccurrencesOfString:@"\t" withString:@""]; 
    if ([self.currentElement isEqualToString:@"id"]) { 
     [self.currentID appendString:string]; 
    } 
} 

- (void)parserDidEndDocument:(NSXMLParser *)parser { 
    self.currentID = nil; 
} 

: 이것은 내가 당신의 코드를 작성하는 것이 방법이다. 이것은 누출 위치를 지적 할 수 있습니다.

+0

만약 내가 10 번 투표 할 수 있다면. 정적 분석기를 사용해 보았지만 프로젝트에서 누수가있는 곳에서는 누출이 발견되지 않았고 누출이 발견되지 않았습니다. 그림을 이동. – Rudiger