Назначение нескольких операторов, заключенных в круглые скобки и фигурные скобки в ObjC

Я просматривал код сторонней структуры RESideMenu и замечал какой-то странный синтаксис, который, казалось, работал нормально. Вот путающий бит:

self.tableView = ({
    UITableView *tableView = [[UITableView alloc] initWithFrame:frame style:UITableViewStylePlain];
    tableView.autoresizingMask = mask;
    tableView.delegate = self;
    tableView.dataSource = self;
    tableView.opaque = NO;
    tableView.backgroundColor = [UIColor clearColor];
    tableView.backgroundView = nil;
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    tableView.bounces = NO;
    tableView.scrollsToTop = NO;
    tableView;
});

Как работает этот синтаксис? Я подозреваю, что это имеет какое-то отношение к области C-уровня, но я никогда раньше этого не видел. Я также подумал, что это может быть новая функция с литералами Objc-2.0, но я не думаю, что это правда.

Итак, я думаю, мой вопрос в том, как это работает/что заставляет это работать?

Ответ 1

Как упоминалось в NSHipster:

За магией используется расширение GCC C, которое заставляет блок кода возвращать значение, если оно заключено в скобки и круглые скобки.

Это не только разделяет детали конфигурации на инициализацию, но и дополнительная область позволяет повторять использование имен универсальных переменных, таких как кадр, кнопка и представление, при последующих инициализациях. Нет больше loginButtonFrame =.../signupButtonFrame =...!