我对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/