У меня есть объект с именем dto. Этот объект является дочерним по отношению к другому, а высший класс его отца - NSObject. Я хотел бы получить все свойства dto и всех его суперклассов. На самом деле я получаю EXC_BAD_ACCESS, когда хочу видеть свойство property в моем bucle. Большое спасибо!Concatenate objc_property_t
unsigned int i, superPropertyCount, propertyCount;
objc_property_t *properties = class_copyPropertyList([dto class], &propertyCount);
if ([[dto class] isSubclassOfClass:[NSObject class]])
{
memcpy(properties, properties, propertyCount * sizeof(objc_property_t));
id superClass = [[dto class] superclass];
while ([superClass isSubclassOfClass:[NSObject class]])
{
objc_property_t *superProperties = class_copyPropertyList(superClass, &superPropertyCount);
properties = malloc((propertyCount + superPropertyCount) * sizeof(objc_property_t));
if (properties != NULL)
{
memcpy(properties, properties, propertyCount * sizeof(objc_property_t));
memcpy(properties+propertyCount, superProperties, superPropertyCount * sizeof(objc_property_t));
}
propertyCount = propertyCount + superPropertyCount;
superClass = [superClass superclass];
}
}
for (i = 0; i < propertyCount; i++)
{
objc_property_t property = properties[i];
NSString *propertyName = [NSString stringWithUTF8String: property_getName(property)];
}
Несмотря на то, что очень интересно - полезно и образовательно - чтобы отбросить глубины среды выполнения, такого рода самоанализ, как правило, следует избегать в производственном коде. Он изобилует хрупкостью. Objective-C на самом деле не предназначен для полностью динамического, ориентированного на выполнение времени, языка. – bbum