Grand Central Dispatch (GCD) vs. performSelector - necesito una mejor explicación
He usado GCD y performSelectorOnMainThread: waitUntilDone en mis aplicaciones, y tiendo a pensar que son intercambiables, es decir, performSelectorOnMainThread: waitUntilDone es un contenedor Obj-C para la sintaxis GCD C. He estado pensando en estos dos comandos como equivalentes:
dispatch_sync(dispatch_get_main_queue(), ^{ [self doit:YES]; });
[self performSelectorOnMainThread:@selector(doit:) withObject:YES waitUntilDone:YES];
¿Soy incorrecto? Es decir, ¿hay alguna diferencia entre los comandos performSelector * y los GCD? He leído mucha documentación sobre ellos, pero aún no he visto una respuesta definitiva.