我需要能够区分目标c内置类和特定于应用程序的类。我现在正在做出这个决定的方法是检查班级名称是否以“__”开头,这是一个可怕的黑客解决方案,但它确实有效。
所以我的问题是,确定类是基于类的构建还是特定于应用程序的类的正确方法是什么?
//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
}
}
答案 0 :(得分:7)
我不是100%明白“内置课程”的意思。基础框架中的类是否“内置”? UIKit的课程怎么样? QuartzCore? AVFoundation?社会?
此外,尝试区分这样的课程似乎是一个坏主意,除非它只是为了了解系统。
那就是说,也许只需要获取一个类加载的包即可。这将告诉你该课程是从基金会或UIKit等加载的。看看+[NSBundle bundleForClass:]
。