I've been trying to implement NSXMLParser and so far I've had memory issues, performance issues or it doesn't work.
I worked originally from a example off the net and it leaked a heap of memory. I released the objects properly but found that there was a performance hit because I would alloc and then release each object for each element. So then I decided to use properties which have worked better, but when I try and add the dictionary to array it doesn't stick:
[overlay insertObject:entry atIndex:[overlay count]];
So I have 3 questions. Is properties the best way to handle the the memory management issue? If so why can't I store the NSDictionary *entry into overlay? If properties isn't the best way what is?
Cheers
Edit: I'm dealing with relatively small xml files but they have a lot of elements. I've downloaded them from a URL and placing the data into an SQLite database.
- (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);
}
}
The other delegate calls aren't being used because the only data is in the attributes. NSLog at the end just returns null.