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

ice*_*ace 11 xcode objective-c xcode4

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

Kur*_*vis 18

使用Objective-C运行时函数.

  • objc_getClassList获取Classes 的列表
  • class_getSuperclass或者-superclass走超级链的方法
  • class_conformsToProtocol或者-conformsToProtocol:检查类是否符合协议的方法

  • fwiw,`class_conformsToProtocol`比`-conformsToProtocol`更快.这是一个包含数千个课程的大型应用程序中的瓶颈 (3认同)

Den*_*lov 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);
Run Code Online (Sandbox Code Playgroud)