Есть два способа:
- (id)callRestService: (NSString *) methodName : (NSDictionary *) params
{
NSURL *url=[self getRestUrl: methodName : params];
XmlParser *xmlParser = [[[XmlParser alloc] init] autorelease]; // !!!
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:xmlParser];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
[parser parse];
[parser setDelegate:nil];
[parser release];
return xmlParser.dictionaryArray;
}
В этом случае xmlParser
будет выпущено позже в конце текущей обработки цикла выполнения, так что dictionaryArray
будет действительным при возврате.
Второй способ:
- (id)callRestService: (NSString *) methodName : (NSDictionary *) params
{
NSURL *url=[self getRestUrl: methodName : params];
XmlParser *xmlParser = [[XmlParser alloc] init];
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:xmlParser];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
[parser parse];
[parser setDelegate:nil];
[parser release];
[xmlParser.dictionaryArray autorelease]; // !!!
[xmlParser release]; // !!!
return xmlParser.dictionaryArray;
}
В этом случае xmlParser
будет освобожден настолько, насколько это возможно.
(Кстати, не забудьте выпустить parser
)