我正在试图找出一种“标记”类的方法,这个类将在以后编写,这样我就可以在运行时找到它们,但不强制使用特定的父类。目前,我正在考虑应用一个协议,然后找到所有具有该协议的类。
但我还没弄明白是怎么回事。
有没有人知道是否有可能找到在运行时实现特定协议的所有类?或者--有没有更好的方法来“标记”类并找到它们?
发布于 2018-01-24 12:14:09
为了防止有人对这个老问题感兴趣,我最终编写了一些代码,找到了应用程序的所有包,并扫描了这些包中的类。这比使用基于objc_getClassList
的代码效率高得多,因为它扫描的是有限数量的类,而不是整个运行时。
如果您感兴趣,可以在此处找到我使用的代码:https://github.com/drekka/Alchemic/blob/master/alchemic/NSBundle%2BAlchemic.m
发布于 2011-06-18 21:35:57
使用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);
}
发布于 2011-06-18 21:41:58
我认为您必须遍历类的列表(objc_getClassList()),并检查每个类是否实现了相关的协议(class_conformsToProtocol())。
https://stackoverflow.com/questions/6396298
复制相似问题