我是 Obj C 和 iOS 开发的新手,我遇到了一个我不明白为什么会发生的问题。
为了设置场景,我有 2 个模型类,Player 和 Computer Player 以及一个 Controller。
玩家:
@interface Player : NSObject
-(void) playerMessage;
@end
电脑播放器:
@interface ComputerPlayer : Player
-(void) computerPlayerOnlyMessage;
@end
Controller :
@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];
}
但是上面的问题是 [currentPlayer computerPlayerOnlyMessage] 在打开 ARC 时给出编译器错误。当 ARC 关闭时,它会发出编译器警告,但也会按照我的预期运行。
感谢任何帮助,帮助我弄清楚为什么会发生这种行为。
最佳答案
这样定义不是更好吗:
- (void)playerMessage;
ComputerPlayer
类中的方法和:
-(void)playerMessage {
[super playerMessage];
[self computerOnlyPlayerMessage];
}
那是继承
的一个点,不是吗?您将类变量定义(期望)为 Player
但不是 ComputerPlayer
,如果它是 ComputerPlayer
,它将只为“计算机”执行特定工作.
当然然后你执行:
[Player playerMessage]; // Warning should gone
关于ios - ARC 和 Objective C 子类化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21931852/