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:
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.
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
:
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.
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.
Tags und Links objective-c objective-c-blocks variables