Самоанализ свойств объектов Objective-C - PullRequest
2 голосов
/ 01 февраля 2012

Можно ли программно получить свойства объекта в target-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]);
} 

1 Ответ

5 голосов
/ 01 февраля 2012

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

Самоанализ по определению происходит во время выполнения. Кроме того, target-c является высокодинамичным языком, откладывающим практически все до времени выполнения.

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

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

...