如何在 Xcode 4 中获取符合特定协议的所有类的列表?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/9882984/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 23:47:39  来源:igfitidea点击:

How do I get list of all classes conform to certain protocol in Xcode 4?

objective-cxcodexcode4

提问by icespace

I am new to Xcode. I want to know how can I know all classes conform to certain protocol in Xcode 4.3.1? And how can I know all subclasses of one class?

我是 Xcode 的新手。我想知道如何知道所有类都符合 Xcode 4.3.1 中的特定协议?我怎么知道一个类的所有子类?

回答by Kurt Revis

Use the Objective-C runtime functions.

使用Objective-C 运行时函数

  • objc_getClassListto get the list of Classes
  • class_getSuperclassor the -superclassmethod to walk the superclass chain
  • class_conformsToProtocolor the -conformsToProtocol:method to check if a class conforms to a protocol
  • objc_getClassList获取Classes列表
  • class_getSuperclass-superclass遍历超类链的方法
  • class_conformsToProtocol-conformsToProtocol:检查类是否符合协议的方法

回答by Denis Mikhaylov

Protocol *protocol = @protocol(YourProtocol);

int numberOfClasses = objc_getClassList(NULL, 0);
Class *classList = malloc(numberOfClasses * sizeof(Class));
numberOfClasses = objc_getClassList(classList, numberOfClasses);

for (int idx = 0; idx < numberOfClasses; idx++) 
{
    Class class = classList[idx];
    if (class_getClassMethod(class, @selector(conformsToProtocol:)) && [class conformsToProtocol:protocol])
    {
        NSLog(@"%@", NSStringFromClass(class));
    }
}
free(classList);