ObjC继承的另一个奇怪之处

时间:2011-11-04 17:44:59

标签: iphone objective-c

我对Objective C继承有另一个奇怪的问题。我有一个名为IGameObject的协议,一个继承自NSObject和IGameObject的GameObject类,最后是一个继承自GameObject的Player ..

问题在于,当我将Player *分配给IGameObject *时,会产生错误,但是当我将Player *分配给GameObject *时,它可以正常工作。我没有看到这在我读过的所有内容中是不可能的。代码如下:

-(IGameObject*) clone
{
    Player* p=(Player*) 0xFFfFFFFF;
    //Throws an error saying that Cannont initialise a variable of type IGameObject with an value of           Player*
    IGameObject* go=p;

    //This works perfectly
    GameObject* go2=p;

    return [[Player alloc] initWithGameObject:self];
 }

有人能猜出发生了什么吗?

提前致谢。

2 个答案:

答案 0 :(得分:4)

当返回(或声明)仅由其接口知道的类型时,不要将其视为对象指针。相反,使用:

-(id<IGameObject>) clone {

id<IGameObject> go=p;

这应该清除警告。

旁注:为什么在世界中您将p分配给内存地址?!

答案 1 :(得分:0)

您无法创建指向协议的指针

IGameObject* go=p;

毫无意义。