Переменные экземпляра, объявленные в файле реализации ObjC

Я смотрел вводный видеоролик WWDC ARC и увидел то, чего никогда раньше не видел в ObjC, когда какой-то инженер Apple рассказывал о примере стека.

Следующий код был использован для примера стека с ARC:

@implementation Stack 
{ 
    // instance variable declared in implementation context
    NSMutableArray *_array; 
}

- (id)init 
{
   if (self = [super init])
      _array = [NSMutableArray array];
   return self;
}

- (void)push:(id)x 
{
   [_array addObject:x];
}

- (id)pop 
{
   id x = [_array lastObject];
   [_array removeLastObject];
   return x;
}

@end

Обратите внимание на переменную экземпляра, объявленную сразу после директивы @implementation .

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

  • Это какая-то новая конструкция, представленная в SDK для iOS 5, или это было возможно уже давно?
  • Будет ли хорошей практикой объявлять переменные экземпляра в реализации, если к переменным экземпляра нельзя обращаться за пределами объекта? Кажется, более чистым, чем использование директивы @private.
47
задан Wolfgang Schreurs 28 February 2012 в 08:38
поделиться