2011-05-16 176 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