首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Objective-C运行时查找声明符合特定协议的类

使用Objective-C运行时查找声明符合特定协议的类
EN

Stack Overflow用户
提问于 2011-06-18 21:20:52
回答 3查看 2.8K关注 0票数 18

我正在试图找出一种“标记”类的方法,这个类将在以后编写,这样我就可以在运行时找到它们,但不强制使用特定的父类。目前,我正在考虑应用一个协议,然后找到所有具有该协议的类。

但我还没弄明白是怎么回事。

有没有人知道是否有可能找到在运行时实现特定协议的所有类?或者--有没有更好的方法来“标记”类并找到它们?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-24 12:14:09

为了防止有人对这个老问题感兴趣,我最终编写了一些代码,找到了应用程序的所有包,并扫描了这些包中的类。这比使用基于objc_getClassList的代码效率高得多,因为它扫描的是有限数量的类,而不是整个运行时。

如果您感兴趣,可以在此处找到我使用的代码:https://github.com/drekka/Alchemic/blob/master/alchemic/NSBundle%2BAlchemic.m

票数 1
EN

Stack Overflow用户

发布于 2011-06-18 21:35:57

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

代码语言:javascript
复制
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);
}
票数 28
EN

Stack Overflow用户

发布于 2011-06-18 21:41:58

我认为您必须遍历类的列表(objc_getClassList()),并检查每个类是否实现了相关的协议(class_conformsToProtocol())。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6396298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档