有什么方法可以在运行时发现给定类存在哪些子类?

编辑:到目前为止的答案,我认为我需要澄清更多我想做的事情。我知道这在 cocoa 中并不常见,可能会有一些警告。

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

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

最佳答案

与其尝试自动注册MYCommand的所有子类,不如将问题一分为二?

首先,提供用于注册类的API,例如+[MYCommand registerClass:]

然后,在MYCommand中创建代码,这意味着所有子类都将自动注册自己。就像是:

@implementation MYCommand
+ (void)load
{
    [MYCommand registerClass:self];
}
@end

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

10-09 16:13