Jedną z cech współczesnego (64-bitowego OS X OS X i iPhone OS) środowiska wykonawczego Objective C jest zdolność do dynamicznej syntezy znaków ivar bez wyraźnego deklarowania ich w klasa:Jaki jest podstawowy mechanizm syntezy ivar w nowoczesnym środowisku wykonawczym Objective C
@interface MyClass : NSObject {
// NSString *name; unnecessary on modern runtimes
}
@property (retain) NSStrng *name;
@end
@implementation MyClass
@synthesize name;
@end
w zupełnie kawałka mojego kodu używam niestandardowe implementacje getter aby zainicjować właściwości:
- (NSString *) name {
if (!name) {
name = @"Louis";
}
return name;
}
powyższe jest niezgodne z syntetyzowanych Ivars ponieważ potrzebuje dostępu tematyce ivar to nie jest deklaracja ed w nagłówku. Z różnych powodów chciałbym zaktualizować wiele moich osobistych frameworków, aby używać zsyntetyzowanych ivars, gdy są zbudowane na nowoczesnych środowiskach wykonawczych, powyższy kod musi zostać zmodyfikowany, aby działał z syntezowanymi ivars, aby osiągnąć ten cel.
Podczas gdy dokumentacja Celu C 2.0 stwierdza, że syntezowane dodatki w nowoczesnym środowisku wykonawczym zsyntetyzują ivar przy pierwszym użyciu. Nie określa, do czego służy ten mechanizm niskiego poziomu. Czy jest to zrobione przez class_getInstanceVariable(), czy ograniczenia dotyczące class_addIvar() są rozluźnione, czy jest to funkcja nieudokumentowana w obiektywnym środowisku wykonawczym C 2.0? Chociaż mogłem zaimplementować własne składowanie po stronie dla danych wspierających moje właściwości, wolałbym raczej użyć mechanizmu, którego używają syntezowane akcesory.
Byłbym naprawdę pod wrażeniem, jeśli masz odpowiedź na to – Shawn