Мне нужно уметь различать объективные c встроенных классов и классы приложений. То, как я делаю это определение прямо сейчас, проверяет, начинается ли название класса с «__», что является ужасным и взломанным решением, но оно работает.Objective C Runtime - Встроенные классы и пользовательские классы?
Итак, мой вопрос в том, что является правильным способом выяснить, является ли класс построением класса или классом конкретного приложения?
//a variable named object is defined already
unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList([object class], &outCount);
for (i = 0; i < outCount; i++)
{
objc_property_t property = properties[i];
NSString *propertyName = [NSString stringWithUTF8String:property_getName(property)];
id propertyValue = [object valueForKey:(NSString *)propertyName];
NSString *classString = NSStringFromClass([propertyValue class]);
if ((classString.length > 2 && [[classString substringToIndex:2] isEqual:@"__"]))
{
// Objective C Class (NSString, NSArray, NSDate, NSNumber)
}
else
{
// Not Objetive C Class
}
}
** Почему? ** Зачем вам это нужно? Есть так много способов, что это плохая идея. – bbum
@bbum Я пишу объект для сопоставления словаря. Если Object является сложным объектом, мне нужно, чтобы он думал о свойствах и создавал ключ/значения. Если нет, мне нужно разобрать значение непосредственно в словаре. Источник здесь, и в коде есть предупреждение, связанное с частью, опубликованной здесь в строке 87. https://github.com/aryaxt/OCMapper/blob/master/OCMapper/Source/ObjectMapper.m – aryaxt
Аккуратный материал (На самом деле - очень круто - я был довольно глубоко в динамичной кроличьей дыре, и это вызывает интерес!), Академически, но действительно ли вам нужен этот уровень динамизма? Если это академическое преследование, погрузитесь! В противном случае? Вам действительно нужна абстракция, чтобы ваше приложение быстро и эффективно работало? – bbum