Можно получить доступ к ivar напрямую, под тем же именем, что и синтезированное свойство.Директива @synthesize
создает ivar от вашего имени, если он еще не существует, и поскольку это директива компилятора, ivar доступен во время компиляции.См. «Разница во времени выполнения» в главе «Объявленные свойства» языка программирования Objective-C.Как отметил Абизерн в комментарии, для ivar также можно указать любое имя: @synthesize coffee=tea;
- здесь, tea
- это ivar, а coffee
- свойство.
Чтобы использовать ivar, просто обращайтесь к нему, как к любой другой переменной, без использования точечного синтаксиса.Следующее является абсолютно законным и работает, как и ожидалось:
@interface Grisby : NSObject {}
@property (retain) NSObject * obj;
@end
@implementation Grisby
@synthesize obj;
- (void) dealloc {
[obj release], obj = nil;
[super dealloc];
}
- (id) init {
self = [super init];
if( !self ) return nil;
obj = [NSObject new];
return self;
}
- (NSObject *) obj {
return [[obj retain] autorelease];
}
@end
«Современная среда выполнения» была введена в Mac OS X 10.5 (Leopard) как часть перехода на 64-разрядную версию.Все версии iOS используют современную среду выполнения.Синтезированные переменные экземпляра являются особенностью современного времени выполнения, как отмечено в ссылке, которую я предоставил выше.
Другое ключевое отличие, , отмеченное в «Версии и платформы времени выполнения» Objective-CРуководство по программированию во время выполнения заключается в том, что переменные экземпляра являются «не хрупкими».В хранилище и доступ к ivar добавлен слой косвенности, который позволяет классам добавлять переменные, не влияя на хранение производных классов.Это также предположительно облегчает синтез переменных экземпляра.У Грега Паркера есть объяснение , касающееся котят, в нем содержится справочная информация в Mike Ash *1019*, а у Bavarious здесь на SO есть сообщение о хранилище ivarи расширения класса.
Вы можете увидеть другие вещи, которые изменились, хотя и без объяснений, в главе "Mac OS X Версия 10.5 Delta" Справочника по Objective-C Runtime.