我对Obj C和iOS开发很陌生,遇到了一个我不了解为什么会发生的问题。

因此,要设置场景,我有2个模型类,即Player和Computer Player以及一个Controller。

玩家:

@interface Player : NSObject
-(void) playerMessage;
@end


ComputerPlayer:

@interface ComputerPlayer : Player
-(void) computerPlayerOnlyMessage;
@end


控制器:

@interface viewController : UIViewController{
Player *p1;
Player *p2;
Player *currentPlayer;
}


@implmentation ViewController
-(void)viewDidLoad
{
 p1 = [[Player alloc]init];
 p2 = [[ComputerPlayer alloc]init];

 [p1 playerMessage];
 currentPlayer = p2;
 [currentPlayer computerPlayerOnlyMessage];
}


但是,上述问题是,当ARC打开时,[currentPlayer computerPlayerOnlyMessage]会给出编译器错误。当ARC关闭时,它会发出编译器警告,但也会像我期望的那样运行。

感谢您提供任何帮助,以帮助我弄清楚为什么会发生这种情况。

最佳答案

定义是否更好:

- (void)playerMessage;


ComputerPlayer类中的方法和:

-(void)playerMessage {
   [super playerMessage];

   [self computerOnlyPlayerMessage];

}


这是inheritance的意思,不是吗?您将类变量定义(期望)为Player而不是ComputerPlayer,如果为ComputerPlayer,它将仅对“计算机”执行特定的工作。

当然,然后执行:

[Player playerMessage]; // Warning should gone


附言:请投下反对票的人解释原因,并给予同意的机会

关于ios - ARC和Objective C子类化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21931852/

10-10 03:58