Я пытался реализовать NSXMLParser, и до сих пор у меня были проблемы с памятью, проблемы с производительностью или он не работает.
Первоначально я работал с примера из сети, и он просочился в кучу памяти. Я освободил объекты должным образом, но обнаружил, что производительность снизилась, потому что я выделил, а затем выпустил каждый объект для каждого элемента. Тогда я решил использовать свойства, которые работали лучше, но когда я пытаюсь добавить словарь в массив, он не привязывается:
[overlay insertObject:entry atIndex:[overlay count]];
Итак, у меня есть 3 вопроса. Является ли свойства лучшим способом решения проблемы управления памятью? Если так, почему я не могу сохранить запись NSDictionary * в оверлее? Если свойства не лучший способ, что это?
Приветствия
Редактировать: я имею дело с относительно небольшими 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 в конце просто возвращает ноль.