Como é chamada essa forma de escopo? [duplicado

Esta pergunta já tem uma resposta aqui:

Objective-C Declare vars com ({…}) 1 resposta

Mais ou menos por acidente, me deparei com essa forma de escopo

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;
});

Acho que é uma boa maneira de criar e instanciar objetos e variáveis, pois as variáveis temporárias permanecerão apenas enquanto forem necessárias para criar o objeto de que realmente preciso e me importo. No código acimaidx desaparecerá assim que eu escrever o interidataSource para o exteriordataSource, pois o escopo será deixado logo depoi
Também acho interessante o fato de que um objeto totalmente instanciado e configurado será definido como o objeto extern
Na verdade, eu nem sei se esse é um recurso C ou Objective-C ou um doce de sintaxe adicionado ao clan

@ Unheilig
esta é uma sintaxe para organizar o código. não é algo como um bloqueio ou fechamento. no final do código, você apenas tem um objeto totalmente instanciado e configurad

Isso é útil se você precisar de um objeto apenas para passá-lo como argumento a um método, mas a configuração desse objeto leva mais de uma instrução. Em vez de atribuí-lo a uma variável temporária local, você pode passar uma expressão de instruçã

[[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;
})];

Em um ambiente não-ARC, você pode chamar a liberação automática dentro da instrução de expressã

Então, trata-se de organização de códigos e muito gosto pessoal, eu ach

questionAnswers(1)

yourAnswerToTheQuestion