Objective-C: Get list of subclasses from superclass

后端 未结 2 1752
悲&欢浪女
悲&欢浪女 2021-01-04 11:54

In Objective-C is there a way to ask a Class if there are any Subclass implementations.

I have a Base class which has multiple subclasses. I would like to loop throu

2条回答
  •  慢半拍i
    慢半拍i (楼主)
    2021-01-04 12:36

    This function gives you all subclasses of a class:

    #import 
    
    NSArray *ClassGetSubclasses(Class parentClass)
    {
      int numClasses = objc_getClassList(NULL, 0);
      Class *classes = NULL;
    
      classes = (__unsafe_unretained Class *)malloc(sizeof(Class) * numClasses);
      numClasses = objc_getClassList(classes, numClasses);
    
      NSMutableArray *result = [NSMutableArray array];
      for (NSInteger i = 0; i < numClasses; i++)
      {
        Class superClass = classes[i];
        do
        {
          superClass = class_getSuperclass(superClass);
        } while(superClass && superClass != parentClass);
    
        if (superClass == nil)
        {
          continue;
        }
    
        [result addObject:classes[i]];
      }
    
      free(classes);
    
      return result;
    }
    

    Taken from Cocoa with Love.

提交回复
热议问题