2010-06-24 6 views
0

J'utilise TouchXML pour analyser un XML-stream de la manière suivante:Fuite de mémoire dans TouchMXL?

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

Maintenant, je reçois toujours une fuite de mémoire dans le « stringValue » -ligne ... je fais quelque chose de mal ou est-ce TouchXML?

Merci beaucoup,

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

}

Répondre

0

Vous avez au moins une fuite quand [[direction stringValue] isEqualToString:@""] est vrai que vous sortir de la boucle sans relâcher AutoreleasePool. Au-delà, nous aurions besoin de voir l'implémentation de votre classe AbfahrtszeitResult pour voir comment votre setter Linie est défini.

+0

salut, J'ai ajouté la mise en œuvre de Abfahrtszeitresult (les getters et setters). Vous pouvez ignorer le NSAutoreleasePool - bien sûr, c'est une erreur que je fais, mais la fuite était là avant que je ne présente le pool. – swalkner