تسرب الذاكرة في touchmxl؟
-
29-09-2019 - |
سؤال
أنا أستخدم 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" -line ... هل أفعل شيئًا خاطئًا أم أنه TouchXML؟
شكرًا جزيلاً،
ستيفان
-(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];
}
المحلول
لديك تسرب واحد على الأقل عندما [[direction stringValue] isEqualToString:@""]
صحيح أنك تنفجر من الحلقة دون إطلاق سراحك التلقائي. علاوة على ذلك ، نحتاج إلى رؤية تنفيذ الخاص بك AbfahrtszeitResult
الفصل لترى كيف Linie
يتم تعريف Setter.
لا تنتمي إلى StackOverflow