Objective-C 中的后代枚举

发布于 2024-07-10 12:11:12 字数 240 浏览 12 评论 0原文

是否有可能获得 Objective-C 中特定类的所有后代类的列表?

就像是:

  @interface A : NSObject
  @end

  @interface B : A
  @end

  @interface C : A
  @end

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

Is it possible to get a list of all descendant classes of a particular class in objective-c?

Something like:

  @interface A : NSObject
  @end

  @interface B : A
  @end

  @interface C : A
  @end

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

林空鹿饮溪 2024-07-17 12:11:12

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

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

The only way I can think is to enumerate the entire list of classes in the runtime (obtained with objc_getClassList) and test each one for isKindOfClass:A.

This is likely the only solution because classes do not maintain links to their descendants (only to their superclass).

避讳 2024-07-17 12:11:12

作为示例,我链接到 解决方案 by Ken FerryWil Shipley 博客文章。

本质上就是走课。

As an example I am linking to solution by Ken Ferry to a Wil Shipley blog post.

Essentially, walking the classes.

旧话新听 2024-07-17 12:11:12

你能以某种方式使用班级成员吗? 调用[[A class] superclass]返回自身超类的Class类的实例。 我认为您可以从类的 Class 中获取类的名称 - 这会达到您想要的效果吗?

这根本不真正处理协议,但也许这至少会为您指明正确的方向。

Could you use the class member somehow? Calling [[A class] superclass] returns an instance of the Class class for self's superclass. I think that you can get the name of a class from its Class - would that do what you want?

This doesn't really handle Protocols at all, but maybe this will point you in the right direction at least.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文