gpt4 book ai didi

objective-c - 在 Obj-C 中发现给定类的子类

转载 作者:太空狗 更新时间:2023-10-30 03:27:06 25 4
gpt4 key购买 nike

有没有办法在运行时发现给定类存在哪些子类?

编辑:从目前的答案来看,我认为我需要进一步澄清我正在尝试做的事情。我知道这在 Cocoa 中不是一种常见的做法,并且可能会有一些警告。

我正在使用动态创建模式编写解析器。 (参见 Buck 和 Yacktman 合着的 Cocoa Design Patterns 一书,第 5 章。)基本上,解析器实例处理堆栈,并实例化知道如何执行特定计算的对象。

如果我可以获得 MYCommand 类的所有子类,例如,我可以为用户提供可用命令的列表。此外,在第 5 章的示例中,解析器有一个替换字典,因此可以使用 +、-、* 和/等运算符。 (它们映射到 MYAddCommand 等)对我来说,这些信息似乎属于 MyCommand 子类,而不是解析器实例,因为它有点违背动态创建的想法。

最佳答案

不直接,不。但是,您可以获得在运行时注册的所有类的列表,并查询这些类的直接 父类(super class)。请记住,这不允许您找到类在继承树上的所有祖先,只能找到直接父类(super class)。

您可以使用 objc_getClassList()获取在运行时注册的 Class 对象的列表。然后,您可以遍历该数组并在那些 Class 对象上调用 [NSObject superclass] 以获取其父类(super class)的 Class 对象。如果由于某种原因你的类不使用 NSObject 作为它们的根类,你可以使用 class_getSuperclass()相反。

我还应该提到,如果您认为有必要进行这种发现,您可能对应用程序设计的思考不正确。很可能还有另一种更传统的方法来完成您要完成的任务,它不涉及对 Objective-C 运行时的自省(introspection)。

关于objective-c - 在 Obj-C 中发现给定类的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1810628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com