如何获得符合Xcode 4中某些协议的所有类的列表?

时间:2012-03-27 03:24:59

标签: objective-c xcode xcode4

我是Xcode的新手。我想知道如何知道所有类符合Xcode 4.3.1中的某些协议? 我如何知道一个类的所有子类?

2 个答案:

答案 0 :(得分:16)

使用Objective-C runtime functions

  • objc_getClassList获取Class es
  • 的列表
  • class_getSuperclass-superclass方法走过超类链
  • class_conformsToProtocol-conformsToProtocol:方法检查某个类是否符合协议

答案 1 :(得分:8)

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);