2010-09-16 5 views

Antwort

4

Ja, für den größten Teil. Blöcke sind Art von C-Funktionen behandelt Art von wie Objekte, die Variablen aus dem umgebenden Bereich erfassen können. Anonyme Funktionen sind Blöcken gleichwertig, aber aufgrund der eher komplizierten hinter den Kulissen liegenden Maschinerie von Blöcken sicherlich nicht identisch. Wenn Sie beispielsweise einen Block nach/außerhalb der Funktion/Methode verwenden möchten, die den Block definiert, ist dieser Block nicht mehr aktiv - dies ist der Fall, wenn Sie den Block als Eigenschaft festlegen oder in GCD (einem Multi-Objekt) verwenden (Core-Operation-Warteschlange-Bibliothek), müssen Sie es mit Block_copy() (oder [aBlock copy]) kopieren. Ich werde nicht auf die Details eingehen, aber das ist sicherlich nicht etwas, was Sie mit JS (anonymen) Funktionen machen. Es hat mit der Tatsache zu tun, dass Block Literale auf dem Stapel (und nicht irgendwo im Code) zugeordnet sind, und Sie müssen es auf den Heap kopieren, wenn Sie es dauerhaft erhalten möchten.

Es kann ziemlich kompliziert werden (aber ziemlich schön in seinem Design), aber für die meisten Anwendungsfälle ist es ziemlich einfach und Sie können es wie anonyme JS-Funktionen behandeln. ;-)

3

Ja. Blöcke in Objective-C sind Verschlüsse.