我在Objective C(iOS应用)中进行了一些思考,并构建了一个自定义的测试环境,并且试图获取我在项目中创建的类的列表,因此我可以对其进行迭代并寻找某些方法。通过使用反射进行声明。

我的问题是要检索该列表。我不想手动将每个类输入到反射类的列表或某个静态字段中,而是让它对于任何项目都是通用的。

该列表可以是类名称或Class类型的对象的列表。

我确实设法在文档中找到了objc_getClassList()函数:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html
但这会创建所有类的列表,而我将无法确定哪些是用户定义的,哪些不是用户定义的。我试图在Internet上寻求指导,但是没有找到答案或类似问题的运气。

任何帮助表示赞赏!

编辑:
现在,我还尝试使用objc_copyImageNames(),希望能够以图像的形式找到我的项目,然后使用objc_copyClassNamesForImage()来获取列表,但由于项目不被视为图像,所以运气不好,我猜值得一试。

最佳答案

您可以使用objc_getClassList()文档中的代码
并使用[NSBundle bundleForClass:class]检查每个类是否已在您的
应用:

int numClasses;
Class * classes = NULL;

classes = NULL;
numClasses = objc_getClassList(NULL, 0);

if (numClasses > 0 )
{
    classes = (__unsafe_unretained Class *)malloc(sizeof(Class) * numClasses);
    numClasses = objc_getClassList(classes, numClasses);
    for (int i = 0; i < numClasses; i++) {
        Class c = classes[i];
        NSBundle *b = [NSBundle bundleForClass:c];
        if (b == [NSBundle mainBundle]) {
            NSLog(@"%s", class_getName(c));
            // ...
        }
    }
    free(classes);
}

关于ios - 项目Objective-c中的类别列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20032166/

10-14 20:27
查看更多