Objekt: SCHLECHTER ZUGRIFF beim Aufruf von Blöcken ^ {} in späteren Funktionen?

Im Anschluss daranDiskussionIch habe ein schlechtes Zugriffsproblem festgestellt.

Eine Schleife besteht aus mehreren Schritten: a, b, c, ... x, y, z:

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

Zu einem bestimmten Zeitpunkt führt Schritt x Folgendes aus:

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

In Schritt z werden später alle "verzögerten" Anrufe verarbeitet:

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

            [IRQ removeAllObjects];

Ergebnis: EXEC_BAD_ACCESS

Wenn in Schritt x nur eine einfache Zeichenfolge ohne Objektreferenz wie folgt hinzugefügt wird, funktioniert Schritt Z einwandfrei:

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

Letzte Beobachtung: Wenn ein und derselbe Schritt der Warteschlange Blöcke hinzufügt UND über die Warteschlange iteriert, um die Blöcke auszuführen, tritt kein Problem auf. So wie der Verweis auf ein Objekt "verloren" geht, wenn der Schritt: Methode übrig bleibt?

Ich verstehe nicht viel in diesem Bereich und werde mehr Hilfe brauchen!

edit: James, habe gerade Folgendes versucht, um diesen Referenzzyklus zu umgehen:

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

und es passiert auch. Wie würde Ihre Lösung darauf zutreffen?

Danke im Voraus!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage