ObjC: BAD ACCESS, gdy połączenia blokują ^ {} w późniejszych funkcjach?

Podążając za tymdyskusja, Napotkałam problem z dostępem;

Pętla ma kilka kroków: a, b, c, ... x, y, z:

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

W pewnym momencie krok x wykonuje następujące czynności:

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

Później krok z polega na przetworzeniu wszystkich połączeń „opóźnionych”:

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

            [IRQ removeAllObjects];

Wynik: EXEC_BAD_ACCESS

Teraz, jeśli krok x dodaje tylko zwykły ciąg bez odniesienia do obiektu, jak następuje, krok Z działa dobrze:

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

Ostatnia obserwacja, jeśli ten sam krok dodaje bloki do kolejki I iteruje po kolejce, aby wykonać bloki, to nie wystąpi żaden problem. Podobnie jak odniesienie do obiektu zostaje „utracone”, ponieważ krok: metoda zostaje?

Nie rozumiem zbyt wiele w tej dziedzinie i potrzebuję więcej pomocy!

edytuj: James, właśnie wypróbowałem poniższe, aby uniknąć tego odniesienia:

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

i tak się też dzieje. Jak miałoby to zastosowanie do tego rozwiązania?

Z góry dziękuję!

questionAnswers(3)

yourAnswerToTheQuestion