(iOS) dispatch_async () vs. NSOperationQueue

Aprendí la programación de iOS gracias al curso CS193p de Stanford (en iTunes U), así como el libro de programación de iOS de Big Nerd Ranch. En ambos, recomiendan usardispatch_async(), dispatch_get_main_queue(), etc. para manejar subprocesos y operaciones concurrentes. Sin embargo, en la sesión de la WWDC 2012 sobre la creación de una interfaz de usuario simultánea, el orador recomendó el uso deNSOperationQueue.

¿Cuáles son las diferencias entredispatch_*() yNSOperationQueue, y ¿hay alguna razón (técnica, de rendimiento, estilística o de otro tipo) que deba usar una sobre la otra? EsNSOperationQueue sólo un envoltorio de Objective-C alrededordispatch_async, o hay mas que eso?