Я создаю приложение, которое должно обрабатывать разбор нескольких различных типов файлов XML. Поскольку я хочу стандартизировать процедуру как можно больше, я создал одноэлементный класс, который обрабатывает разбор любых XML-данных. Класс передается двумя параметрами, уникальным идентификатором, указывающим, какие данные XML он будет анализировать и сами данные. В классе имеется следующая функция, которая делает синтаксический и возвращает объект NSMutableArray, содержащий результаты:Дефрагментатор XMLParser и утечки памяти
- (NSMutableArray*) initAPIDataParse:(NSData *)data APIRequestType:(int)requestType {
// Init parser
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// Set delegate for parser
if (requestType == kXMLParserTypeOne) {
[parser setDelegate:[[[XMLParserOne alloc] init] autorelease]];
} else if (requestType == kXMLParserTypeTwo) {
[parser setDelegate:[[[XMLParserTwo alloc] init] autorelease]];
} // etc.
// let's parse the XML
[parser parse];
[parser release];
return lastParsedDict; //lastParsedDict is the NSMutableArray object returned from the Parser delegate
}
Приведенный выше код работает как шарм, за исключением того, что если вы разбираете тот же тип XML несколько раз эта линия утечки (что имеет смысл):
[parser setDelegate:[[[XMLParserOne alloc] init] autorelease]];
я пытался несколько вещей, чтобы решить эту проблему, как создать переменный экземпляр с экземпляром делегата и отпуская его всякий раз, когда тот же самый тип XML Parser попросили еще раз, пока это не сработало.
Я рад за любую помощь здесь, спасибо большое!