我使用一个名为"soapResults"的类成员连接到一个web服务。我使用解析器来解析xml结果(它是web服务中的json结果)。
- (void) parser:(NSXMLParser *) parser
didStartElement:(NSString *) elementName
namespaceURI:(NSString *) namespaceURI
qualifiedName:(NSString *) qName
attributes:(NSDictionary *) attributeDict {
NSString *attName = [[NSString alloc]initWithFormat:@"%@Result",methodName];
if ([elementName isEqualToString:attName]) {
if (!soapResults) {
soapResults = [[NSMutableString alloc] init];
}
elementFound = YES;
}
[attName release];
}
现在soapResults是一个retain成员并在dealloc中释放。我试图在连接失败/通过时释放这个,但没有成功。我也试着不分配它,但后来我得到空结果....如有任何帮助,不胜感激
编辑:解析器内部也有内存泄漏:
-(void)parser:(NSXMLParser *) parser
foundCharacters:(NSString *)string {
if (elementFound) {
[soapResults appendString: string];//Memory leak here
}
}
如果soapResults是保留属性,您应该更改
soapResults = [[NSMutableString alloc] init];
self.soapResults = [NSMutableString string];
释放旧值并保留新值,避免泄漏。
您在这里分配了soapResults = [[NSMutableString alloc] init];
,但我没有看到任何释放