Objective C Runtime - 内置类与自定义类?

时间:2013-06-24 04:59:38

标签: objective-c objective-c-runtime

我需要能够区分目标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
    }
}

1 个答案:

答案 0 :(得分:7)

我不是100%明白“内置课程”的意思。基础框架中的类是否“内置”? UIKit的课程怎么样? QuartzCore? AVFoundation?社会?

此外,尝试区分这样的课程似乎是一个坏主意,除非它只是为了了解系统。

那就是说,也许只需要获取一个类加载的包即可。这将告诉你该课程是从基金会或UIKit等加载的。看看+[NSBundle bundleForClass:]