Каков основной механизм синтеза ивара в современной среде выполнения Objective C?

Одной из особенностей современной среды выполнения Objective C (64-разрядная версия OS X и iPhone) является возможность для свойств динамически синтезировать ивары без явного объявления их в классе:

@interface MyClass : NSObject {
//  NSString *name; unnecessary on modern runtimes
}

@property (retain) NSStrng *name;

@end

@implementation MyClass

@synthesize name;

@end

В значительной части моего кода я использую пользовательские реализации getter для инициализации свойств:

- (NSString *) name {
  if (!name) {
    name = @"Louis";
  }

  return name;
}

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

В то время как документация Objective C 2.0 заявляет, что синтезированные средства доступа в современной среде выполнения будут синтезировать ivar при первом использовании. Он не указывает, какой механизм низкого уровня используется для этого. Это сделано с помощью class_getInstanceVariable (), ослаблены ли ограничения на class_addIvar (), это недокументированная функция в целевой среде выполнения C 2.0? Хотя я мог бы реализовать свое собственное стороннее хранилище для данных, поддерживающих мои свойства, я бы предпочел использовать механизм, который используют синтезированные методы доступа.

Ответы на вопрос(3)

Ваш ответ на вопрос