I am currently working on a very similar problem. You've asked some great questions.
In my application I have made the call to a separate parser method in the -(void) connectionDidFinishLoading:(NSURLConnection *)connection
myQueue = dispatch_queue_create("com.flocycling.gcdparser", NULL);
dispatch_async(myQueue, ^ { [self parseRSSData: RSSFeedData];
[self.myTableView reloadData]; } );RSSFeedData is just the NSMutableData object I used to gather the XML data pulled down from the website. I am also using a separate thread so that the interface stays interactive. Once the data is parsed I call reloadData on my table view. I am listing each article of the XML feed in a tableView and then when it is selected I open the article in a webview.
Here is my parser method that gets called.
-(void) parseRSSData: (NSData *) rssData
{
NSXMLParser *parser = [[NSXMLParser alloc] initWithData: rssData];
[parser setDelegate: self];
[parser parse];
}
For the separate thread I notified Grand Central Dispatch right after the @implementation call.
dispatch_queue_t myQueue;
I did all of this in the viewController that owns the tableView. I don't feel there is a need to have delegates etc for this functionality. I could be wrong but it's the way I worked it out.
I hope this was somewhat helpful. Let me know if I can help clarify anything.
Take care,
Jon