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

ary*_*axt 2 objective-c objective-c-runtime

我需要能够区分目标c内置类和特定于应用程序的类.我现在正在做出这个决定的方法是检查班级名称是否以"__"开头,这是一个可怕的hacky解决方案,但它确实有效.

所以我的问题是,确定一个类是基于类的构建还是特定于应用程序的类的正确方法是什么?

//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
    }
}
Run Code Online (Sandbox Code Playgroud)

rob*_*off 7

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

此外,试图区分这样的类似乎是一个坏主意,除非它只是为了了解系统.

也就是说,也许它足以获得一个类加载的包.这将告诉你这个类是从Foundation,UIKit等加载的.看看+[NSBundle bundleForClass:].