我试图找出一种方法来“标记”类,稍后将编写这些类,以便在运行时找到它们,但不强制使用特定的父类。目前,我正在考虑应用一个协议,然后找到所有具有该协议的类。
但我不知道怎么做。
有人知道在运行时是否可以找到实现特定协议的所有类吗?或者-有没有更好的方法来“标记”类并找到它们?
最佳答案
看起来使用Objective-C Runtime API并不太困难。具体来说,您可以使用objc_getClassList
和class_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/