Iphone XMLParser泄漏的问题

Iphone XMLParser泄漏的问题,iphone,memory-leaks,nsxmlparser,Iphone,Memory Leaks,Nsxmlparser,一段时间以来,我一直在努力让xml解析器无泄漏、高效地工作,但迄今为止还没有成功。我删除了其他字段,因为它们都是相同的 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{

一段时间以来,我一直在努力让xml解析器无泄漏、高效地工作,但迄今为止还没有成功。我删除了其他字段,因为它们都是相同的

- (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];
 }

任何帮助都将不胜感激。

如果您已经声明了IVAR的属性,我建议您使用它们。这使得内存管理更容易。以下是我编写代码的方式:

- (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;
}

您可能还想尝试构建和分析代码。这可能会指出你在哪里泄密。

如果我能投票支持你10次,我会的。我确实试过静态分析仪,但在我的项目中,它没有在有泄漏的地方发现任何泄漏,也没有在没有泄漏的地方发现泄漏。算了吧。