Что делают независимые фигурные скобки в Objective-C

Итак, у меня есть этот блок кода в книге, которую я изучаю. Что на самом деле делает этот независимый {}?

self = [super initWithImageNamed:@"character.png"];
{
    self.name = playerName;
    self.zPosition = 10;
}

Отличается ли это от

self = [super initWithImageNamed:@"character.png"];
self.name = playerName;
self.zPosition = 10;

person chanpkr    schedule 05.07.2014    source источник
comment
это должно быть self = [super init...]; if (self) { ... }   -  person Bryan Chen    schedule 05.07.2014


Ответы (3)


Это просто область действия, нет никакой разницы в двух опубликованных вами фрагментах кода, но вы можете объявить короткоживущую переменную внутри фигурных скобок и ограничить ее только этими несколькими строками кода.

{
    int x = 5;
}
NSLog("%d", x);  //error
int x = 10;      //legal

Первая переменная x выходит из области видимости после окончания фигурной скобки, поэтому эта переменная будет очищена. Это не часто используемая функция, но она может быть полезна для определения области действия определенных переменных. Вы можете думать об этом так же, как о блоке if или while без указания входа, который будет запущен один раз.

person Kevin DiTraglia    schedule 05.07.2014

Фигурные скобки определяют локальную область. Его можно использовать просто для удобства чтения кода, или вы также можете использовать его для ограничения области действия локальных переменных:

   For example:-

    -(void)yourMethod
   {
   {
  NSString  *str=@test;
   }
   {
   NSString  *str=@testing;
   }
  }

Таким образом, в приведенном выше примере вы можете определить две локальные переменные с одинаковыми именами в пределах двух областей. Это использование независимых фигурных скобок.

person Hussain Shabbir    schedule 05.07.2014

Что сказал Кевин. Точнее, группу операторов, окруженных {}, можно использовать везде, где может быть один оператор. Когда вы кодируете, например:

if (x == y) {
    a = b;
}

вы просто применяете это правило к базовой структуре:

if (<test>) <statement>

заменив { <statement_list> } на <statement>.

Аналогично с for и do и так далее.

person Hot Licks    schedule 05.07.2014