ObjC: плохой доступ при вызове блоков ^ {} в последующих функциях?

Следуя этомуобсуждениеЯ столкнулся с проблемой плохого доступа;

Цикл имеет несколько шагов: a, b, c, ... x, y, z:

-(void)cycle:(float)delta{
[self stepA]
[self stepB]
// etc.
[self stepZ]
}

В какой-то момент шаг x делает следующее:

// IRQ is an NSMutableArray
// Self is a reference to the engine running the cycles
[IRQ addObject:^{ NSLog(@"hello! %@", self); } ];

Позже, шаг z должен обработать все «задержанные» звонки:

            for (int i = 0; i < [IRQ count]; i++){
                void (^delayedCall)(void) = [IRQ objectAtIndex:i];
                delayedCall();
            }

            [IRQ removeAllObjects];

Результат: EXEC_BAD_ACCESS

Теперь, если шаг x добавляет только простую строку без ссылки на объект, как показано ниже, шаг Z работает нормально:

[IRQ addObject:^{ NSLog(@"hello!"); } ];

Последнее наблюдение: если один и тот же шаг добавляет блоки в очередь И выполняет итерации по очереди для выполнения блоков, то никаких проблем не возникает. Подобно тому, как ссылка на объект «теряется» как шаг: метод оставлен?

Я не очень разбираюсь в этой области и мне понадобится дополнительная помощь!

редактировать: Джеймс, только что попробовал следующее, чтобы избежать этого ссылочного стиля:

NSString *userName = @"James";
[IRQ addObject:^{ NSLog(@"hello %@", userName); } ];

и это тоже бывает. Как ваше решение применимо к этому?

Заранее спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос