Eines der Merkmale der modernen Objective-C-Laufzeit (64 Bit OS X und iPhone OS) ist die Fähigkeit, Eigenschaften dynamisch zu synthetisieren, ohne sie explizit zu deklarieren die Klasse:Was ist der zugrundeliegende Mechanismus für die Synthese von Ivar in der modernen Objective-C-Laufzeit?
@interface MyClass : NSObject {
// NSString *name; unnecessary on modern runtimes
}
@property (retain) NSStrng *name;
@end
@implementation MyClass
@synthesize name;
@end
in ziemlich viel mein Code verwende ich benutzerdefinierte Getter-Implementierungen, um die Eigenschaften zu initialisieren:
- (NSString *) name {
if (!name) {
name = @"Louis";
}
return name;
}
die oben ist nicht kompatibel mit synthetisierten ivars, da sie eine eine zugreifen muss Ivar das ist nicht deklarieren Ed in der Kopfzeile. Aus verschiedenen Gründen möchte ich einige meiner persönlichen Frameworks aktualisieren, um synthetisierte Ivars zu verwenden, wenn sie auf modernen Laufzeiten basieren. Der obige Code muss modifiziert werden, um mit synthetisierten Ivars zu arbeiten, um dieses Ziel zu erreichen.
Während die Objective C 2.0 Dokumentation besagt, dass die synthetisierten Accessoren auf der modernen Laufzeit den Ivar bei der ersten Verwendung synthetisieren wird. Es gibt nicht an, welcher Low-Level-Mechanismus dafür verwendet wird. Ist es erledigt durch class_getInstanceVariable(), sind die Beschränkungen für class_addIvar() gelockert, ist es eine undokumentierte Funktion in der objektiven C 2.0 Laufzeit? Während ich meinen eigenen Side-Speicher für die Daten implementieren könnte, die meine Eigenschaften unterstützen, würde ich viel lieber den Mechanismus verwenden, den synthetisierte Accessoren verwenden.
ich wirklich beeindruckt sein würde, wenn Sie eine Antwort auf diese – Shawn