2016-07-22 30 views
0

Ich lese, wenn Block eine Variable außerhalb ändern will, muss diese Variable mit dem Schlüsselwort __block beschrieben werden, da es in Heap mit Block selbst kopiert werden muss.In iOS-Block, wie Variablen außerhalb ändern ohne Verwendung von __block

Aber was, wenn ich nicht __block verwenden und immer noch die Variable ändern möchte, gibt es einen Weg?

habe ich einige denken, dass vielleicht ich diese Variable global oder static anstelle eines auto ein, so dass sie in statischen Speicherbereich gespeichert werden eingestellt werden.

Oder kann ich es auf Zeiger und zeigen auf einige Inhalte, die auf Heap zugeordnet ist? Ich habe diesen Fall versucht, der nicht funktioniert hat, ich würde gerne wissen warum.

+1

Was meinst du mit "muss sein" und "muss"? Was versuchst du genau zu vermeiden? Es muss nicht, aber es könnte mit der Leistung helfen –

+0

@ JulianF.Weinert, mein Verständnis ist, dass für die zukünftige Verwendung, ARC automatisch Block mit seinen Variablen auf Heap kopieren würde, sonst würden beide Block und seine Variablen auf Stapel freigegeben werden. – Boris

+1

Ja, Sie können externe globale oder statische Variablen innerhalb des Blocks ändern. – newacct

Antwort

0

Um zu vermeiden, die Variable zu verlieren, würde Block im Wesentlichen die lokale Variable auf Heap kopieren, wenn Sie auf die Variable zugreifen und sie ändern möchten. Wenn Sie jedoch die Variable global oder statisch machen, was in der globalen Region gespeichert werden würde, und Sie keine Sorge haben müssen, sie auf dem Stack zu verlieren, würde der Block sie nicht kopieren, sondern direkt modifizieren.

Bitte korrigieren Sie mich, wenn irgendein Fehler und ich markiere mich selbst, wenn es keine bessere gibt.