2011-05-16 172 views
1

我得到我的应用程序的所有类的列表。如何从我的班级列表中找到从特定班级继承的班级?

我想从我的列表中找到继承自MySpecificWrapperClass的每个类。

int numClasses = objc_getClassList(NULL, 0); 
Class *classes = malloc(sizeof(Class) * numClasses); 
objc_getClassList(classes, numClasses); 
for (int i = 0; i < numClasses; i++) { 
    Class class = classes[i]; 
    if(isThisClassInheritsFrom(class,MySpecificWrapperClass)){ 
     MySpecificWrapperClass o = [[class alloc]init]; 
     ... 
    } 
} 
free(classes); 

剂量有人知道该怎么做? 感谢您的帮助。 弗雷德

回答

1

有可能是一个更好的解决方案,但蛮力应该这样做。 class_getSuperclass返回给定对象的超类的Class对象。当你到达根类时,它返回Nil

for (int i = 0; i < numClasses; i++) { 
    Class class = classes[i]; 
    Class superclass = class_getSuperclass(class); 
    while(superclass != Nil){ 
     if(superclass == MySpecificWrapperClass){ 
      // Got one! 
      break; 
     } 
     superclass = class_getSuperclass(superclass); 
    }; 
} 

这是假设你要检查的整个层次给定类,即你希望每一个在其祖先的任何地方有你的类类。如果你只关心直接子类,显然你只需要拨打class_getSuperclass一次。

+0

它的工作原理,谢谢。 – Freddie 2011-05-18 05:21:19

+0

毕竟,层次基本上只是一个链表。乐意效劳! – 2011-05-18 05:22:31

+0

认为它是有用太似乎重手虽然1仍然 – 2011-08-28 04:02:23

0

为了测试如果一个类继承是类的,尽量

if ([obj isKindOfClass: MySpecificWrapperClass]) 
+0

谢谢你的回答。在那个层面上,我没有任何东西。只是全班同学。如果我坚持我的班级,我可以做到这一点,但如果我能做到这一点,那就不合适了。 – Freddie 2011-05-16 08:51:19

+0

是的。如果没有课堂的实际对象,我不知道有什么办法可以实现。尽管如此,祝你好运! – 2011-05-17 10:36:31

0

您可以使用NSObject定义的isSubclassOfClass:方法检查一个类是否是另一个类的子类。

NSObject class reference

+0

我:\t'对(INT I = 0; I Freddie 2011-05-18 05:23:52