项目中使用的类

时间:2013-04-20 01:43:24

标签: objective-c class enumerate

是否有一种优雅的方法来获取项目中使用的类列表?

我知道objc_getClassList(...)获取了Objective-C中的所有类,我试图避免使用class_conformsToProtocol过滤掉类。

感谢。

2 个答案:

答案 0 :(得分:2)

在Xcode中,按 Cmd + 2 打开符号导航器,然后按左下角的C图标按类过滤。

C图标旁边的文档图标可以进一步过滤。结果将只包含项目中定义的类。这是一张图片,你必须点击按钮标记为红色:

Picture of Xcode symbol navigator filtering by classes and project

答案 1 :(得分:1)

此代码将在运行时搜索以您指定的类前缀开头的每个类,并返回其名称(键入但未编译,请注意):

NSArray *AllClassNamesInRuntimeWithPrefix(NSString *myClassPrefix) {
    NSMutableArray *retObj = [NSMutableArray array];

    int nClasses = objc_getClassList(NULL, 0);
    if (nClasses > 0) {
        Class allClasses[] = malloc( nClasses * sizeof(Class) );
        nClasses = objc_getClassList(allClasses, nClasses );

        int i;
        for (i = 0; i < nClasses; i++) {
            NSString *thisClassName = NSStringFromClass( allClasses[i] );
            if ([thisClassName hasPrefix:myClassPrefix]) {
                [retObj appendObject:thisClassName];
            }
        }
        free( allClasses );
    }
    return [NSArray retObj];
}

在运行时搜索项目中的每个类 是一个很高的顺序,因为运行时不具有“项目”的模式,并且类可以存在于可执行文件中或框架,可以随时加载。

相关问题