Reflection

To retrieve the properties for an object, you use:

unsigned int outCount;
objc_property_t *propList = class_copyPropertyList([objectToInspect class], &outCount);

"propList" will contain an array of the properties found inside "objectToInspect", with "outCount" containing the total number of properties

To retrieve the properties name you would:

NSString *propName = [NSString stringWithUTF8String:property_getName(propList[indexOfWantedElement)]];

To get the attributes of the property you would:

NSString *attrs = [NSString stringWithUTF8String:property_getAttributes(propList[indexOfWantedElement)]];

A detailed account can be found in the Objective-C documentation