views:

30

answers:

1

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.

A: 

It was a simple problem as willcodejavaforfood pointed out. As its not an answer all I could do was vote it up.

Rudiger