typestar

Captura en blocks en Objective-C

Las capturas planas son fotos; __block concede escritura.

#import <Foundation/Foundation.h>

int main(void) {
    @autoreleasepool {
        // Blocks capture by value unless __block grants write access.
        __block NSInteger rung = 0;
        void (^ringUp)(NSInteger) = ^(NSInteger cents) {
            rung += cents;
        };

        ringUp(2499); ringUp(1250);
        NSLog(@"Till holds %ld cents", (long)rung);
        // A plain capture is a snapshot from definition time.
        NSString *clerk = @"Rae";
        void (^stamp)(void) = ^{ NSLog(@"Rung up by %@", clerk); };
        stamp();
    }
    return 0;
}

Cómo funciona

  1. __block NSInteger rung deja que el block mute la variable.
  2. Cada llamada por ringUp actualiza el almacenamiento compartido.
  3. Una captura plana como clerk queda congelada al definirse.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
19
Caracteres a escribir
465
Tokens
103
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 95 segundos.

Escribe este fragmento

Paso 2 de 3 en Blocks; paso 17 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →