TouchMXL中的内存泄漏?

时间:2010-06-24 20:41:54

标签: iphone objective-c memory-leaks touchxml

我正在使用TouchXML以下列方式解析XML流:

CXMLDocument *parser = [[CXMLDocument alloc] initWithXMLString:responseString options:0 error:nil];
[responseString release];

// array holding all the nodes
NSArray *directionNodes = [parser nodesForXPath:@"//direction" error:nil];
NSArray *linieNodes = [parser nodesForXPath:@"//route" error:nil];
NSArray *timeNodes = [parser nodesForXPath:@"//time" error:nil];

    for (int i = 0; i < [directionNodes count]; i++) {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        CXMLElement *direction = [directionNodes objectAtIndex:i];
        CXMLElement *route = [linieNodes objectAtIndex:i];
        CXMLElement *time = [timeNodes objectAtIndex:i];

        // if rows are empty, stop it
        if ([[direction stringValue] isEqualToString:@""]) {
            break;
        }

        AbfahrtszeitResult *result = [[AbfahrtszeitResult alloc] init];
        [result setLinie:[route stringValue]];
        [result setZiel:[direction stringValue]];
        [result setZeit:[time stringValue]];

        [mutableAbfahrten addObject:result];
        [result release];
        [pool release];
    }

现在,我总是在“stringValue”行中发生内存泄漏......我做错了什么还是TouchXML?

非常感谢,

的Stefan

-(NSString *) linie {
return linie;
}

- (void) setLinie:(NSString *)textValue {
    [textValue retain];
    [linie release];
    linie = textValue;
}

-(NSString *) ziel {
    return ziel;
}

-(void) setZiel:(NSString *)textValue {
    [textValue retain];
    [ziel release];
ziel = textValue;
}

-(NSString *) zeit {
return zeit;
}

-(void) setZeit:(NSString *)textValue {
    [textValue retain];
    [zeit release];
zeit = textValue;
}

+ (NSString *) cleanUpString:(NSString *) cleanme {
NSMutableString *tempString = [[NSMutableString alloc] initWithString:cleanme];
[tempString replaceOccurrencesOfString:@"&nbsp;" withString:@" " options:0 range:NSMakeRange(0, [tempString length])];
[tempString replaceOccurrencesOfString:@"&nbsp" withString:@" " options:0 range:NSMakeRange(0, [tempString length])];

return [tempString autorelease];

}

1 个答案:

答案 0 :(得分:0)

[[direction stringValue] isEqualToString:@""]为真,当你在没有发布AutoreleasePool的情况下突破for循环时,你至少有一次泄漏。除此之外,我们还需要查看您的AbfahrtszeitResult课程的实施情况,以了解您的Linie制定者的定义方式。