2012-01-31 2 views
2

Возможно ли программно получить свойства объекта в объекте-c без использования методов времени выполнения? Я только спрашиваю, потому что нет необходимости проверять его во время выполнения, когда он не будет меняться. Я имею в виду что-то по этому поводу:Непоследовательность объектов объектов Objective-C

MyObject *foo = [[MyObject alloc] init]; 
NSDictionary *propertiesNamesAndValues = [foo getAllProperties]; 

В настоящее время мое решение выглядит следующим образом:

id currentClass = [MyObject class]; 
NSString *propertyName; 
unsigned int outCount, i; 
objc_property_t *properties = class_copyPropertyList(currentClass, &outCount); 
for (i = 0; i < outCount; i++) 
{ 
    objc_property_t property = properties[i]; 
    propertyName = [NSString stringWithCString:property_getName(property)]; 
    NSLog(propertyName); 
    NSLog(@"%@",[foo valueForKey:propertyName]); 
} 
+2

Итак, вы в основном хотите обернуть вокруг этого кода, называемого 'getAllProperties'? Почему бы просто не добавить этот код в категорию в 'NSObject'? – mattjgalloway

+2

Это 'NSDictionary * propertiesNamesAndValues ​​= [foo getAllProperties];' будет выполняться во время выполнения так же, как и текущее решение. Как говорит @mattjgalloway, похоже, вы просто спрашиваете, можете ли вы инкапсулировать эту функциональность в методе, а ответ - да. – Chuck

ответ

5

Простой ответ не нет.

Интроспекция по определению происходит во время выполнения. Кроме того, объектив-c - это очень динамичный язык, откладывающий практически все на время исполнения.

В Objective-C у вас просто нет синтаксического сахара для самоанализа - у вас просто есть функции времени выполнения C-C.

Тем не менее, ничто не мешает вам писать некоторые категории на NSObject, чтобы предоставить больше Objective-C'ish API, и я думаю, что должно быть реализовано несколько версий с открытым исходным кодом уже через Интернет.

Смежные вопросы