Articles of grand central dispatch

¿Cuál es la diferencia entre las llamadas síncronas y asincrónicas en Objective-C, frente a las multithreading?

Durante mucho tiempo, pensé que también era asíncrono ejecutar algo en un hilo de fondo, mientras que sincrónico significaba en el hilo principal (locking de actualizaciones e interacciones de UI). Entiendo que no ejecutar el hilo principal para acciones costosas es porque no permite que ocurran acciones de IU ya que el hilo principal está […]

¿Diferencia entre dispatch_async y dispatch_sync en cola serie?

Creé una cola en serie como esta: dispatch_queue_t _serialQueue = dispatch_queue_create(“com.example.name”, DISPATCH_QUEUE_SERIAL); ¿Cuál es la diferencia entre dispatch_async llamado así? dispatch_async(_serialQueue, ^{ /* TASK 1 */ }); dispatch_async(_serialQueue, ^{ /* TASK 2 */ }); Y dispatch_sync llamado así en esta cola en serie? dispatch_sync(_serialQueue, ^{ /* TASK 1 */ }); dispatch_sync(_serialQueue, ^{ /* TASK 2 […]

¿Puedo declarar el predicado dispatch_once_t como una variable miembro en lugar de estática?

Quiero ejecutar un bloque de código solo una vez por instancia. ¿Puedo declarar el predicado dispatch_once_t como una variable miembro en lugar de una variable estática? Desde GCD Reference , no está claro para mí. El predicado debe apuntar a una variable almacenada en el scope global o estático. El resultado de utilizar un predicado […]

Grand Central Dispatch (GCD) vs. performSelector – necesita una mejor explicación

He usado tanto GCD como performSelectorOnMainThread: waitUntilDone en mis aplicaciones, y tiendo a pensar que son intercambiables, es decir, performSelectorOnMainThread: waitUntilDone es un envoltorio de Obj-C con la syntax de 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 […]

¿Necesita crear un NSAutoreleasePool dentro de un bloque en GCD?

Normalmente, si genera un hilo de fondo o ejecuta un NSOperation en un NSOperationQueue necesita crear un NSAutoreleasepool para ese hilo o operación porque ninguno existe por defecto. ¿La misma regla se aplica a un bloque que se coloca dentro de una cola de Grand Central Dispatch y se ejecutará en un hilo no principal? […]

Colas concurrentes vs serie en GCD

Estoy luchando por comprender completamente las colas concurrentes y en serie en GCD. Tengo algunos problemas y espero que alguien me pueda responder claramente y en el momento. Estoy leyendo que las colas en serie se crean y se usan para ejecutar las tareas una después de la otra. Sin embargo, ¿qué ocurre si: Creo […]

¿Corregir el patrón Singleton Objective C (iOS)?

Encontré información en la red para crear una clase singleton usando GCD. Eso es genial porque es seguro para subprocesos con muy poca sobrecarga. Lamentablemente no pude encontrar soluciones completas, sino solo fragmentos del método sharedInstance. Así que hice mi propia clase usando el método de prueba y error – y et voila – salió […]

GCD para realizar tareas en el hilo principal

Tengo una callback que puede provenir de cualquier hilo. Cuando recibo esta callback, me gustaría realizar una determinada tarea en el hilo principal. ¿Debo verificar si ya estoy en el hilo principal, o hay alguna penalización si no realizo este control antes de llamar al código? dispatch_async(dispatch_get_main_queue(), ^{ // do work here });

¿Cuál es la diferencia entre performSelectorOnMainThread y dispatch_async en la cola principal?

Estaba teniendo problemas para modificar una vista dentro de un hilo. Traté de agregar una subvista, pero tardó alrededor de 6 segundos en mostrarse. Finalmente lo hice funcionar, pero no sé exactamente cómo. Entonces me preguntaba por qué funcionó y cuál es la diferencia entre los siguientes métodos: //this worked -added the view instantly dispatch_async(dispatch_get_main_queue(), […]

iPhone – Tema principal de Grand Central Dispatch

He estado utilizando con éxito el gran despacho central en mis aplicaciones, pero me preguntaba cuál es la verdadera ventaja de usar algo como esto: dispatch_async(dispatch_get_main_queue(), ^{ … do stuff o incluso dispatch_sync(dispatch_get_main_queue(), ^{ … do stuff Quiero decir, en ambos casos estás disparando un bloque para que se ejecute en el hilo principal, exactamente […]