as ist der zugrunde liegende Mechanismus für die Ivarsynthese in der modernen Objective C-Laufzei

Eine der Funktionen der modernen (64-Bit-OS X- und iPhone-OS) Objective C-Laufzeit ist die Fähigkeit von Eigenschaften, Ivars dynamisch zu synthetisieren, ohne sie explizit in der Klasse zu deklarieren:

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

@property (retain) NSStrng *name;

@end

@implementation MyClass

@synthesize name;

@end

n einem Großteil meines Codes verwende ich benutzerdefinierte Getter-Implementierungen, um die Eigenschaften zu initialisiere

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

  return name;
}

Der obige Code ist nicht mit synthetisierten Ivars kompatibel, da auf einen Ivar zugegriffen werden muss, der nicht im Header deklariert ist. Aus verschiedenen Gründen möchte ich eine Reihe meiner persönlichen Frameworks aktualisieren, um synthetisierte Ivars zu verwenden, wenn sie auf den modernen Laufzeiten basieren. Der obige Code muss geändert werden, um mit synthetisierten Ivars zu arbeiten, um dieses Ziel zu erreichen.

Während die Objective C 2.0-Dokumentation angibt, dass die synthetisierten Zugriffsmethoden in der modernen Laufzeitumgebung das IVAR bei der ersten Verwendung synthetisieren. Es gibt nicht an, welcher Mechanismus auf niedriger Ebene verwendet wird, um dies zu tun. Wird es von class_getInstanceVariable () ausgeführt, werden die Einschränkungen für class_addIvar () gelockert, ist es eine undokumentierte Funktion in der objektiven C 2.0-Laufzeit? Während ich meinen eigenen Side-Storage für die Daten implementieren könnte, die meine Eigenschaften sichern, würde ich lieber den Mechanismus verwenden, den synthetisierte Accessoren verwenden.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage