title: (iOS) dispatch_async() vs. NSOperationQueue
body: <p>I learned iOS programming thanks to Stanford's CS193p course (on iTunes U) as well as the iOS programming book from Big Nerd Ranch.  In both of those, they recommend using <code>dispatch_async()</code>, <code>dispatch_get_main_queue()</code>, etc. to handle threading and concurrent operations.  However, at WWDC 2012's session on building concurrent UI, the speaker recommended the use of <code>NSOperationQueue</code>.</p>
  
  <p>What are the differences between <code>dispatch_*()</code> and <code>NSOperationQueue</code>, and is there any reason (technical, performance, stylistic, or otherwise) that I should use one over the other?  Is <code>NSOperationQueue</code> just an Objective-C wrapper around <code>dispatch_async</code>, or is there more to it than that?</p>