Я пытался реализовать NSXMLParser, и до сих пор у меня были проблемы с памятью, проблемы с производительностью или это не сработало.Проблемы с управлением NSXMLParser и памятью
Я работал первоначально из примера с сети, и он просочился в кучу памяти. Я правильно выпустил объекты, но обнаружил, что был удар по производительности, потому что я бы выделил и затем выпустил каждый объект для каждого элемента. И тогда я решил использовать свойство, которые работали лучше, но когда я пытаюсь добавить словарь в массив не прилипает:
[overlay insertObject:entry atIndex:[overlay count]];
Так у меня есть 3 вопроса. Является ли свойство наилучшим способом справиться с проблемой управления памятью? Если да, почему я не могу хранить запись NSDictionary * в оверлей? Если свойства не являются наилучшим способом, что такое?
Приветствия
Edit: я имею дело с относительно небольших XML-файлов, но у них есть много элементов. Я загрузил их из URL-адреса и поместил данные в базу данных SQLite.
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ([attributeDict objectForKey:@"title"]) {
self.title = [attributeDict objectForKey:@"title"];
} else if ([attributeDict objectForKey:@"lng"]) {
self.latitude = [attributeDict objectForKey:@"lng"];
self.longitude = [attributeDict objectForKey:@"lat"];
}
if (title && latitude) {
NSMutableDictionary *entry = [[NSMutableDictionary alloc] init];
[entry setObject:title forKey:@"title"];
[entry setObject:latitude forKey:@"latitude"];
[entry setObject:longitude forKey:@"longitude"];
[overlay insertObject:entry atIndex:[overlay count]];
[entry release];
NSLog(@"%@", overlay);
}
}
Другие вызовы делегатов не используются, поскольку в атрибутах используются только данные. NSLog в конце просто возвращает null.
Я предпочитаю использовать libxml2 – Akusete
Что это значит, что «это не прилипает»? Вы должны либо получать отладочную информацию, либо работать. – jtbandes
напишите свой код парсера – slf