Was bedeutet der "__block" keyword bedeuten?
Was genau macht der __block
Schlüsselwort in Objective-C zu bedeuten? Ich weiß, es ermöglicht das ändern von Variablen innerhalb von Blöcken haben, aber ich würde gerne wissen...
- Was genau sagt der compiler?
- Tut es sonst noch etwas?
- Wenn es dann funktioniert, warum ist es notwendig in den ersten Platz?
- Ist es in der Dokumentation irgendwo? (Ich kann es nicht finden).
InformationsquelleAutor der Frage mjisrawi | 2011-08-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es sagt dem compiler, dass eine variable markiert, indem es behandelt werden muss, in besonderer Weise, wenn es verwendet wird, innerhalb eines Blocks. Normalerweise werden die Variablen und deren Inhalte, auch in Blöcke kopiert werden, damit alle änderungen durchgeführt, um diese Variablen zeigen nicht außerhalb des Blockes. Wenn Sie markiert sind, mit
__block
die Veränderungen in den block, sind auch sichtbar in der Außenwelt.Für ein Beispiel und weitere Informationen finden Sie unter Die __Lagertyp sperren in apples Blöcke Themen der Programmierung.
Wichtige Beispiel ist dieses hier:
In diesem Beispiel, beide
localCounter
undlocalCharacter
geändert werden, bevor der block aufgerufen wird. Doch in den block, nur die änderung zulocalCharacter
sichtbar sein würde, Dank der__block
Schlüsselwort. Umgekehrt kann der block ändernlocalCharacter
und diese änderung ist sichtbar außen am block.InformationsquelleAutor der Antwort DarkDust
@bbum deckt Blöcke in die Tiefe in einen blog-post Berührungen und auf der __Lagertyp sperren.
Als für Anwendungsfälle finden Sie
__block
wird manchmal verwendet, um zu vermeiden, behalten Zyklen, da es nicht behalten das argument. Ein typisches Beispiel ist die Verwendung selbst.InformationsquelleAutor der Antwort Joe
__block ist ein storage qualifier kann auf zwei Arten verwendet werden:
Kennzeichnet, dass eine variable lebt in einem Speicher, der gemeinsam genutzt wird zwischen den lexikalischen Umfang der ursprünglichen Variablen und alle Blöcke deklariert, die in diesem Bereich. Und Klang erzeugen eine Struktur, die zur Darstellung dieser Variablen und verwenden Sie diese Struktur durch einen Verweis(nicht als Wert).
Im MRC, __block kann verwendet werden, um zu vermeiden, behalten Objekt-Variablen einen block erfasst. Darauf achten, dass diese nicht funktioniert ARC. Im BOGEN, den Sie verwenden sollten, __schwach statt.
Finden Sie in apple doc für detaillierte Informationen.
InformationsquelleAutor der Antwort Mindy
__block
ist ein Lagertyp ist Gebrauch zu machen, im Umfang Variablen veränderlich, mehr ehrlich gesagt, wenn Sie deklarieren eine variable mit diesem Bezeichner, seine Referenz, pe übergeben Blöcke nicht ein nur-lese-Kopie für weitere details siehe Blöcke Programmierung in iOSInformationsquelleAutor der Antwort mithilesh
Normalerweise, wenn Sie nicht verwenden __block, wird der block kopieren(halten) die variable, also auch wenn Sie ändern die variable, der block hat Zugriff auf das alte Objekt.
In diesen 2 Fällen braucht man __block:
1.Wenn Sie möchten, ändern Sie die variable innerhalb des Blocks und erwarten, dass es sichtbare Aussenseite:
2.Wenn Sie möchten, ändern Sie die variable, nachdem Sie deklariert haben den block und Sie erwarten, dass der block um die Veränderung zu sehen:
InformationsquelleAutor der Antwort Hamid Vakilian
hoffe, dies wird Ihnen helfen,
lassen, nehmen wir an, wir haben einen code wie:
erscheint eine Fehlermeldung "variable ist nicht belegbar", weil die stack-variable innerhalb des Blocks sind standardmäßig unveränderlich.
hinzufügen __block(Speicher-Modifikator), gefolgt von it-Erklärung machen es zu Mutationen in den block, ich.e
__block int stackVariable=1;
InformationsquelleAutor der Antwort Anurag Bhakuni
Aus der Block Language Spec:
Für details auf, was für ein __block-variable sollte so kompilieren, finden Sie in der Block-Implementierung SpecAbschnitt 2.3.
InformationsquelleAutor der Antwort Martin Gordon
Es bedeutet, dass die variable einen Präfix verwendet werden innerhalb eines Blocks.
InformationsquelleAutor der Antwort Rich Allen