Чтобы расширить ответ MVDS' (начал писать это, прежде чем я увидел его), вот небольшая выборка программа, которая использует Objective-C во время выполнения API Переберите и печатать информацию о каждой собственности в классе:
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
@interface TestClass : NSObject
@property (nonatomic, retain) NSString *firstName;
@property (nonatomic, retain) NSString *lastName;
@property (nonatomic) NSInteger *age;
@end
@implementation TestClass
@synthesize firstName;
@synthesize lastName;
@synthesize age;
@end
int main(int argc, char *argv[]) {
@autoreleasepool {
unsigned int numberOfProperties = 0;
objc_property_t *propertyArray = class_copyPropertyList([TestClass class], &numberOfProperties);
for (NSUInteger i = 0; i < numberOfProperties; i++)
{
objc_property_t property = propertyArray[i];
NSString *name = [[NSString alloc] initWithUTF8String:property_getName(property)];
NSString *attributesString = [[NSString alloc] initWithUTF8String:property_getAttributes(property)];
NSLog(@"Property %@ attributes: %@", name, attributesString);
}
free(propertyArray);
}
}
Выход:
возраст недвижимости атрибуты: T^д, VAGE
Свойство LastName атрибуты: T @ "NSString", &, N, VlastName
Свойство ПгвЬЫате атрибуты: T @ "NSString", &, N, VfirstName
Заметьте, что эта программа должна быть составлена с ARC включенный.
Хороший вопрос о последующих действиях заключается в том, как динамически возвращать значения каждого из них ... Я думаю, что динамически создавать аксессуар, но синтаксически, я все еще пытаюсь понять это. –
Есть несколько способов сделать это, но самым простым было бы использовать KVC: 'id value = [self valueForKey: @" propertyName "]'. Получается немного сложнее, если у вас есть как примитивные (int, float, и т. Д.), Так и объекты (NSString и т. Д.), Но основная посылка будет работать. –
этот код просачивается как ад – mvds