¿Alguien puede explicar cómo funciona esta sintaxis de bloque?Sintaxis del bloque Objective-C: ¿alguien puede explicar esto?
AStreamBuilder stream_builder = [ [ ^(void)
{
// some more code..
return (NSInputStream *)[ NSInputStream inputStreamWithFileAtPath: some_path ];
} copy ] autorelease ];
return stream_builder;
¿Cuál es el nombre del bloque aquí? ¿Por qué se copia el bloque y luego se libera automáticamente? Estoy algo confundido con lo que está sucediendo aquí ... se dice que el bloque devuelve AStreamBuilder pero dentro del cuerpo del bloque devuelve una instancia de NSInputStream.
¿Alguien puede romper esto?
Si el bloque va a devolver una instancia de NSStream, ¿cómo es que el tipo de devolución no se declaró en la sintaxis anterior? – randombits
Esto se debe a que el 'vacío' que ve allí no es el valor de retorno, sino el argumento (s). No hay argumentos para este bloque. El tipo de devolución no se especifica en absoluto aquí. Esto está bien porque "[El tipo de devolución es opcional y se deduce de las declaraciones de devolución.] (Http://clang.llvm.org/docs/BlockLanguageSpec.txt)" – puzzle
@rand Están pasando dos cosas allí: en el por una parte, como dijo el acertijo, el tipo de devolución se deduce de la declaración de devolución. Por otro lado, 'AStreamBuilder' es un' typedef' que define el tipo de retorno del bloque. Para que la asignación funcione, el tipo de retorno inferido debe coincidir con el tipo de retorno definido en 'AStreamBuilder'. Puede inspeccionar la declaración de 'AStreamBuilder' en Xcode haciendo clic derecho y eligiendo Saltar a definición. –