Явное объявление ivars дает вам возможность использовать специальный тип для ivar внутри.
Типичным примером является внутренне изменяемый объект, доступ к которому можно получить извне, неизменяемым образом.
Пример:
@interface Foo : NSObject
@property (readonly) NSArray *bars;
@end
@implementation
{
NSMutableArray *bars;
}
@synthesize bars;
- (void)addBar:(Bar *)bar
{
[bars addObject:bar];
}
@end
Конечно, объект, возвращаемый из свойства bars
, на самом деле не является неизменным. Но дело в том, что API не раскрывает свою изменчивость.
Обратите внимание, что я использовал новый причудливый стиль private-ivars-in-реализация. Это зависит от современной среды выполнения, а также от компилятора clang.