NSXMLParser и проблемы управления памятью - PullRequest
0 голосов
/ 29 июля 2010

Я пытался реализовать 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 в конце просто возвращает ноль.

1 Ответ

0 голосов
/ 16 августа 2010

Это была простая проблема, как указал willcodejavaforfood.Поскольку это не ответ, все, что я мог сделать, это проголосовать за него.

...