Вы говорите об интроспекции свойств среды выполнения, которая, как оказалось, Objective-C очень хороша в .
В случае, если вы опишите, я предполагаю, что у вас есть такой класс:
@interface MyClass
{
NSArray * stuff;
}
@property (retain) NSArray * stuff;
@end
Что кодируется в XML примерно так:
<class>
<name>MyClass</name>
<key>stuff</key>
</class>
Исходя из этой информации, вы хотите воссоздать класс, а также присвоить ему соответствующее значение для stuff
.
Вот как это может выглядеть:
#import <objc/runtime.h>
// ...
Class objectClass; // read from XML (equal to MyClass)
NSString * accessorKey; // read from XML (equals @"stuff")
objc_property_t theProperty =
class_getProperty(objectClass, accessorKey.UTF8String);
const char * propertyAttrs = property_getAttributes(theProperty);
// at this point, propertyAttrs is equal to: T@"NSArray",&,Vstuff
// thanks to Jason Coco for providing the correct string
// ... code to assign the property based on this information
Документация Apple (ссылка выше) содержит все грязные детали о том, что вы можете увидеть в propertyAttrs
.