¿Cómo se llama esta forma de alcance? [duplicar

Esta pregunta ya tiene una respuesta aquí:

Objective-C Declara vars con ({…}) 1 respuesta

Más o menos por accidente me topé con esta forma de alcance

DataSource *dataSource =({
    NSInteger idx = [[self.tableView indexPathForSelectedRow] row];
    DataSource *dataSource = [DataSource new];
    dataSource.address = self.destinations[idx][0];
    dataSource.name    = self.destinations[idx][1];
    dataSource;
});

Creo que es una buena manera de crear e instanciar objetos y variables, ya que las variables temporales solo vivirán mientras sean necesarias para crear el objeto que realmente necesito y cuido. En el código de arribaidx desaparecerá tan pronto como escriba el @ interdataSource al exteriordataSource, ya que el alcance se dejará poco después.
También encuentro atractivo el hecho de que un objeto totalmente instanciado y configurado se establecerá en el objeto externo.
En realidad, ni siquiera sé si se trata de una función C o Objective-C o un dulce de sintaxis agregado al sonido metálico.

@ Unheilig
esta es una sintaxis para organizar el código. No es algo como un bloque o cierre. al final del código, solo tiene un objeto totalmente instanciado y configurado.

Esto es útil si necesita un objeto solo para pasarlo como argumento a un método, pero la configuración de ese objeto requiere más de una declaración. En lugar de asignarlo a una variable temporal local, puede pasar una expresión de declaración.

[[MYViewController alloc] initWithDataSource:({
    NSInteger idx = [[self.tableView indexPathForSelectedRow] row];
    DataSource *dataSource = [DataSource new];
    dataSource.address = self.destinations[idx][@"address"];
    dataSource.name    = self.destinations[idx][@"name"];
    dataSource;
})];

En un entorno que no sea ARC, incluso podría llamar a liberación automática dentro de la declaración de expresión.

Así que solo se trata de la organización del código y mucho gusto personal, supongo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta