Ответ на поставленный вопрос: да, рекурсивные вызовы в завершении блока действительны.
@BillBrasky поднял хорошую мысль о потере области действия блока.Я не знаю достаточно, чтобы сказать, требуется ли это или нет, поскольку я не нашел, что это является проблемой в моей ситуации.Кажется, все работает правильно для меня на каждой последующей итерации через мою рекурсивную функцию.
Основная проблема с кодом, как я его первоначально написал и представил, заключается в использовании FastEnumerator.Это окончательно теряется, когда вы покидаете текущую функцию и выходите в другой цикл обработки событий / новый раздел стекового фрейма.Когда я больше думал об этом, я понял, что, вероятно, за кулисами происходит немало того, чтобы заставить FastEnumeration работать, и вполне логично, что выход из этого метода разрушит настройку.NSEnumerator с простым целым числом, которое я затем каждый раз увеличиваю с помощью рекурсивной функции.Я не большой поклонник этого, поскольку это может привести к проблемам в стиле Out of Bounds, когда FastEnumerator не будет и не будет for (obj in array)
, но я не знаю другого решения.Я думаю, что я опубликую это как отдельный вопрос ...
Исправленный код:
int index;
-(void) mainRoutine {
index = 0;
if (index < [myArray count]) {
[self nextStep];
}
}
-(void) nextStep {
// obtain the object from the array
id obj = [myArray objectAtIndex:index++];
// do my checking on the object
...
[UIView animationWithDuration:animationDuration
animations:^{self.frame = [view frame];}
completions:^(BOOL finished) {
if (finished && index < [myArray count]) {
[self nextStep];
}
else {
// We are done, clean up
...
}
}];
}
Еще раз спасибо @BillBrasky, вы помогли мне указать правильный путь для решения этой проблемы.Я был слишком сосредоточен на рекурсии, и мой быстрый анализ моего объекта ' self ' выглядел хорошо, потому что все за исключением для одного элемента было в порядке.Соедините это с отладчиком, ломающим блок, а не с самой оскорбительной строкой, и который знает, как долго я бы смотрел на код, не видя реальной проблемы.
Приветствия.