Доступно в исходном коде Clang.См. это , в частности CodeGenFunction::GenerateObjCGetter
и CodeGenFunction::GenerateObjCSetter
.Обратите внимание, что код Objective C сначала не генерируется, а затем компилируется;это прямо сделано.Грубая идея состоит в том, что для неатомарного назначенного режима или в режиме только GC генерируется код прямого чтения / записи.Все остальное обрабатывается секретными функциями времени выполнения objc_setProperty
и objc_getProperty
.
Их определения, в свою очередь, можно найти здесь .
В любом случае, это не то, что вы хотите сначала скопировать, а затем изменить.Apple может изменить детальную форму реализации в любое время, не нарушая семантику.
Я бы порекомендовал вам просто написать стандартный установщик / получатель, который мы использовали для написания до введения свойств.Обратите внимание, что в вашем файле .m
может быть @synthesize foo
и ваш пользовательский установщик setFoo:
.Тогда генерируется только геттер.Аналогично с другим делом.
Или один из способов - синтезировать свойство с именем, немного отличающимся от того, которое вы хотите настроить.Предположим, у вас есть
@property (nonatomic,retain) NSString*foo;
в вашем файле .h
.Я бы положил в .m
файл
@interface Foo (private)
@property (nonatomic,retain) NSString*_foo;
@end
@implementation Foo
@synthesize _foo;
и поместил настройки в foo:
и setFoo:
:
-(NSString*)foo{
... do something ...
return self._foo;
}