如何在Objective C的类别类中通过参数解决方法调用



我有一个根类和一些子类。我还有一个DataManager类,它应该在各种类别中保存静态方法,这些方法作用于这个根类的特定子类。

假设对于根类R,子类是C1 &C2。

对于C1,我有一个名为datamemanager +C1的类别。
对于C2,我有一个名为DataManager+C2的类别。

我有一个基本的DataManager类,其中我有声明这个方法-从哪里都可以访问它- 并且没有其他声明:

//DataManager.h
+ (NSDictionary *) Method1 : (DataModelRoot*) R;
//Note that R is my root class. Individual class implementations belong to DataManager+C1.m, DataManager+C2.m etc.

Method1的实现在于DataManager+C1和DataManager+C2。

但是我没有看到多态行为。

也就是说,当期望调用DataManager+C2的Method1时,调用DataManager+C1中的Method1,尽管调用本身是从DataManager+C2源文件发起的。(调用者可以是任何DataManager类别——这是一个极端的情况)。

在同一类层次结构中的对象的类别数量如何解决函数调用?

PS:

再次注意,上面的方法Method1只暴露在一个类(普通datamemanager .h)的.h文件中,根类作为参数。我认为这将确保使用子对象类型正确调用,但它失败了。

当消息的目标实际上是多态时,Objective-C支持类方法的多态性。

的例子:

[DataManager Method1:nil];

…将not多态选择目标,因为目标是具体类DataManager。它总是将消息发送到DataManager中的实现。

另一方面,如果目标是动态确定的,则实际存在预期的多态。一个典型的例子是在同一个类或子类中的实例方法实现:

- (void)foo
{
    [[self class] Method1:nil];
}

这将调用Method1:最接近的重写实现,从而授予多态行为。

旁注:上面描述的行为不受类别的影响。如果没有名称冲突,类别对如何分派消息几乎没有影响。

最新更新