Perdita di memoria in TouchMXL?
-
29-09-2019 - |
Domanda
sto usando TouchXML per analizzare un XML-streaming seguente modo:
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];
}
Ora, ho sempre arrivare una perdita di memoria in-line "stringValue" ... sto facendo qualcosa di sbagliato o è TouchXML?
Grazie mille,
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:@" " withString:@" " options:0 range:NSMakeRange(0, [tempString length])];
[tempString replaceOccurrencesOfString:@" " withString:@" " options:0 range:NSMakeRange(0, [tempString length])];
return [tempString autorelease];
}
Soluzione
Hai almeno una perdita quando [[direction stringValue] isEqualToString:@""]
è vero come si rompe fuori del ciclo for senza rilasciare il tuo AutoreleasePool. Oltre a ciò, avremmo bisogno di vedere l'implementazione della classe AbfahrtszeitResult
per vedere come il vostro setter Linie
è definito.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow