OK. Я использую NSXMLParser так:
myParser = [[[BMLT_Parser alloc] initWithContentsOfURL:[NSURL URLWithString:uri]] retain];
[myParser setDelegate:self];
[myParser performSelectorInBackground:@selector(parse) withObject:nil];
У меня есть свой собственный подкласс для таких вещей, как пул памяти и некоторые данные экземпляра. В принципе, можно считать BMLT_Parser таким же, как NSXMLParser.
Обратите внимание, что я вызываю его асинхронно, поэтому после синхронного вызова нет простого освобождения.
То, что я сделал, объявил следующую делегатскую функцию:
- (void)parserDidEndDocument:(NSXMLParser *)parser ///< The parser in question
{
[myParser release];
myParser = nil;
}
myParser - это переменная экземпляра парсера. По сути, myParser == синтаксический анализатор в обратном вызове.
Теперь проблема в том, что Instruments сообщает мне, что синтаксический анализатор протекает. Парсеры плохо протекают, потому что они упаковывают много багажа.
Как еще мне разобраться с асычными парсерами? Я сильно подозреваю, что мне просто нужно направить на «М», чтобы я мог «RTFM».
Спасибо!