Objective-C Blöcke und Variablen

7

Ich habe heute begonnen, Objective-C-Blöcke zu verwenden. Ich habe den folgenden Code geschrieben:

%Vor%

Was richtig funktioniert. Ich musste die Variable array jedoch nach ihrer Deklaration ändern, also habe ich versucht, den folgenden Code zu verwenden:

%Vor%

Das funktioniert jedoch nicht. Die Konsole druckt (null) nur dreimal. Warum funktioniert das nicht, obwohl es mit meinem ersten Code funktioniert?

Hinweis : Ich weiß, dass dies eine sehr ineffiziente Methode ist, die drei Werte meines Arrays einfach zu drucken, aber das ist nicht mein ursprünglicher Code. Ich stieß auf dieses Problem und versuchte, es aufzulösen, um zu sehen, wo das Problem liegt.

    
Tim Vermeulen 12.10.2012, 16:48
quelle

2 Antworten

18

Dies liegt daran, dass der Block die Variablen nach Wert und beim Erstellen des Blocks aufnimmt (es sei denn, Sie verwenden __block ).

Was Sie wahrscheinlich wollen, ist:

%Vor%

Beispiel mit __block :

%Vor%

Beachten Sie, dass es weniger effizient ist, __block zu verwenden, wenn Sie die Variable innerhalb des Blocks nicht wirklich ändern müssen und sie nach außen reflektieren müssen.

    
Wevah 12.10.2012, 16:50
quelle
3

Der Block erfasst den array -Zeiger bei der Erstellung. Sie können __block modifier hinzufügen, damit der Block den Zeiger als Referenz erfasst. Dies ist jedoch in der Regel kostspielig und wird nicht empfohlen. Es ist besser, wenn der Erfassungsblock erstellt wird, nachdem die Daten innerhalb des Blocks verwendet werden können.

    
Leo Natan 12.10.2012 16:53
quelle