Bloqueia a recursão e quebra o ciclo de retenção
Para ilustrar melhor a questão, considere a seguinte forma simplificada de recursão de bloco:
__block void (^next)(int) = ^(int index) {
if (index == 3) {
return;
}
int i = index;
next(++i);
};
next(0);
XCode (habilitado para ARC) avisa que "Capturar "próximo" fortemente neste bloco provavelmente levará a um ciclo de retenção".
Acordado.
Questão 1: Será que o ciclo de retenção seria quebrado com êxito, definindo o próprio bloco paranil
desta maneira:
__block void (^next)(int) = ^(int index) {
if (index == 3) {
next = nil; // break the retain cycle
return;
}
int i = index;
next(++i);
};
next(0);
(Nota: você ainda receberia o mesmo aviso, mas talvez seja injustificado)
Questão 2: Qual seria uma implementação melhor de recursão de bloco?
Obrigado.