Wie heißt diese Form des Scoping? [Duplikat

Diese Frage hat hier bereits eine Antwort:

Objective-C Deklariere Variablen mit ({…}) 1 Antwort

Mehr oder weniger zufällig bin ich auf diese Form des Scoping gestoßen

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

Ich denke, es ist eine gute Möglichkeit, Objekte und Variablen zu erstellen und zu instanziieren, da temporäre Variablen nur so lange gültig sind, wie sie für die Erstellung des Objekts benötigt werden, das ich wirklich brauche und für das ich mich interessiere. Im obigen Codeidx wird verschwunden sein, sobald ich das innere @ schreidataSource zum äußerendataSource, da der Gültigkeitsbereich bald danach verlassen wird.
Auch finde ich die Tatsache ansprechend, dass ein vollständig instanziiertes und konfiguriertes Objekt auf das äußere Objekt gesetzt wird.
Eigentlich weiß ich nicht einmal, ob dies eine C- oder Objective-C-Funktion oder eine Syntax-Süßigkeit ist, die zu clang hinzugefügt wurde.

@ Unheilig
this ist eine Syntax zum Organisieren von Code. Es ist nicht so etwas wie ein Block oder eine Schließung. Am Ende des Codes steht ein vollständig instanziiertes und konfiguriertes Objekt.

Dies ist praktisch, wenn Sie ein Objekt nur benötigen, um es als Argument an eine Methode zu übergeben, die Konfiguration dieses Objekts jedoch mehrere Anweisungen erfordert. Anstatt es einer lokalen temporären Variablen zuzuweisen, können Sie einen Anweisungsausdruck übergeben.

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

n einer Nicht-ARC-Umgebung können Sie in der expression-Anweisung sogar autorelease aufrufe

So geht es nur um Code-Organisation und viel persönlichen Geschmack, denke ich.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage