2

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

1 回答 1

7

我不是 100% 清楚你所说的“内置类”是什么意思。Foundation 框架中的类是“内置的”吗?UIKit 中的类呢?石英核心?AV基金会?社会的?

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

也就是说,也许获取加载类的包就足够了。这将告诉您该类是否是从 Foundation 或 UIKit 等加载的。查看+[NSBundle bundleForClass:].

于 2013-06-24T05:10:30.077 回答