我试图找出一种方法来“标记”类,稍后将编写这些类,以便在运行时找到它们,但不强制使用特定的父类。目前,我正在考虑应用一个协议,然后找到所有具有该协议的类。
但我不知道怎么做。
有人知道在运行时是否可以找到实现特定协议的所有类吗?或者-有没有更好的方法来“标记”类并找到它们?

最佳答案

看起来使用Objective-C Runtime API并不太困难。具体来说,您可以使用objc_getClassListclass_conformsToProtocol来执行以下操作:

Class* classes = NULL;
int numClasses = objc_getClassList(NULL, 0);
if (numClasses > 0 ) {
    classes = malloc(sizeof(Class) * numClasses);
    numClasses = objc_getClassList(classes, numClasses);
    for (int index = 0; index < numClasses; index++) {
        Class nextClass = classes[index];
        if (class_conformsToProtocol(nextClass, @protocol(MyTaggingProtocol))) {
            //found a tagged class, add it to the result-set, etc.
        }
    }
    free(classes);
}

关于objective-c - 使用Objective-C运行时查找声明它们符合特定协议(protocol)的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6396298/

10-11 16:15