0

我有一个基类,比如 BaseClass,它为几个子类提供了一个公共接口,例如由@interface SubA:BaseClass 定义。

基类的接口包括一个方法,比如 -(void)method1:arg;

在我看来,我想根据情况向不同的子类实例发送消息。View 有一个类似的属性

@property (strong) BaseClass *currentInstance

当我在控制器对象中使用时,

[self.myView setCurrentInstance:instanceOfSubA] 

我收到编译器警告。

然后在某些时候我有

[self.currentInstance method1:thisArg]

一切正常;那是:

检查视图中的类,将类作为 SubA。所有被覆盖的函数都会给出正确的结果。

我可以摆脱警告吗?或者这是一个信号,我会在某个地方遇到麻烦。

4

1 回答 1

0

我似乎在可可与爱中找到了答案

在他对为什么不说“多态”的描述中,Matt Gallagher 给出了这个覆盖的例子:

  MyBaseClass *newObject = [[[MySubClass alloc] init] autorelease];
 [newObject instanceMethodDeclaredInMyBaseClass];

试了一下,效果很好。简单直接,但如果我没有看到这个例子,我就不会想到它。

顺便说一句,我曾多次从 Cocoa With Love 中受益。

于 2013-09-20T23:12:06.023 回答