Objective-C中的后代枚举

时间:2008-12-14 21:46:17

标签: objective-c inheritance runtime metaprogramming

是否可以在objective-c中获取特定类的所有后代类的列表?

类似的东西:

  @interface A : NSObject
  @end

  @interface B : A
  @end

  @interface C : A
  @end

  NSArray *descendants = [A allDescendants];  // descendants = [B, C]

3 个答案:

答案 0 :(得分:5)

我能想到的唯一方法是枚举运行时中的整个类列表(使用objc_getClassList获得)并对每个类isKindOfClass:A进行测试。

这可能是唯一的解决方案,因为类不保持与其后代的链接(仅限于其超类)。

答案 1 :(得分:1)

例如,我将solutionKen Ferry链接到Wil Shipley博文。

基本上,走在课堂上。

答案 2 :(得分:0)

你能以某种方式使用班级成员吗?调用[[A class] superclass]为self的超类返回Class类的实例。我认为你可以从Class得到一个类的名称 - 那会做你想要的吗?

这根本不能真正处理协议,但这可能至少会指向正确的方向。