void (^) (NSData *) ¿qué significa?

Hola, estoy usando esta biblioteca y encontré la function:

- (void) queueRequest:(NSString*)urlPath completion:(void(^)(NSData*))completionWithDownloadedData; 

Intento pasar NSData *data; simples de NSData *data; y arroja un error, lo que realmente significa (void(^)(NSData*)) ? Es la primera vez que lo veo.

Muchas gracias.

(void(^)(NSData*)) declara un bloque de código. Puede llamar a su function de esta manera.

 [obj queueRequest:urlPath completion:^(NSData* data){ /* some code */ }]; 

data son un parámetro de su bloque con el que puede trabajar. El bloque se llamará cuando la queue queueRequest finalice, de forma asíncrona.

La interfaz es asíncrona, lo que significa que los datos solo estarán disponibles en algún momento posterior. Esto significa que el método no puede simplemente devolver el NSData* (sin bloquear todo el time, lo que no es práctico). El problema hoy en día se resuelve a menudo con bloques , y el argumento de finalización aquí es un bloque que toma un argumento NSData* y devuelve void . Así es como llamas a dicho método:

 [foo queueRequest:path completion:^(NSData *receivedData) { NSLog(@"Received data: %@", receivedData); }]; 

La llamada regresará inmediatamente y el bloque se ejecutará en algún momento posterior, cuando los datos estén disponibles.

Es un bloque que acepta un object NSData ya que es solo un argumento y no devuelve nada.

Consulte los temas de progtwigción de bloques de Apple.