¿Cómo retrasar la ejecución de un bloque que fue puesto en queue por dispatch_after?

Digamos que quiero ejecutar un bloque de código más tarde, así que llamo a dispatch_after así:

 double delayInSeconds = 2.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ /* code */ }); 

Pero, ¿qué pasa si quiero "detener" mi progtwig antes de que comenzara la ejecución? Digamos que quiero pausar el progtwig 1 segundo después de esta llamada por un time desconocido. Luego de la pausa, me gustaría reanudar la espera de 2 segundos en la queue. Entonces se vería algo como esto:

  • llame a dispatch_after con un retraso de 2 segundos
  • después de 1 segundo, pausa el progtwig por time desconocido
  • después de reanudar, espere 1 segundo y ejecute el bloque (por lo que el retraso total es de 2 segundos)

¿Hay alguna manera de hacerlo? ¿O debería usar otro enfoque?

Sé que dispatch_suspend y dispatch_resume existen, pero realmente no funcionan para mí (o simplemente no sé cómo usarlos correctamente).

La solución no necesariamente tiene que implicar un locking, también podría ser una callback retardada a una function específica. El punto es que quiero poder pausar el time de espera hasta la ejecución.

No puedes lograr eso, pero hay una manera de hacer algo similar.

Retrase su método 2 segundos:

[self performSelector:@selector(yourMethod) withObject:nil afterDelay:2.0];

1 segundo más tarde, cancele su método:

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(yourMethod) object:nil];

Después de un time desconocido, recupere su método y demore para ejecutarlo 1 segundo más tarde:

[self performSelector:@selector(yourMethod) withObject:nil afterDelay:1.0];

Pon tu bloque en un método

 -(void)myMethod{ //implementation of the block } 

donde desea llamar al bloque PERO un retraso de 2 segundos antes,

llamada

 [self performSelector:@selector(myMethod) withObject:nil afterDelay:2.0]; 

Espero que esto ayude