locos recursivos despachados de forma assíncro

Suponha que eu execute este código:

__block int step = 0;

__block dispatch_block_t myBlock;

myBlock = ^{
     if(step == STEPS_COUNT)
     {
         return;
     }

     step++;
     dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC / 2);
     dispatch_after(delay, dispatch_get_current_queue(), myBlock);
};

dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC / 2);
dispatch_after(delay, dispatch_get_current_queue(), myBlock);

O bloco é invocado uma vez do lado de fora. Quando a chamada interna é atingida, o programa falha sem nenhum detalhe. Se eu usar invocações diretas em todos os lugares, em vez de despachos GCD, tudo funcionará be

Eu também tentei chamar dispatch_after com uma cópia do bloco. Não sei se esse foi um passo na direção certa ou não, mas não foi suficiente para fazê-lo funciona

Ideas?

questionAnswers(5)

yourAnswerToTheQuestion