ios - ARC 和 Objective C 子类化

标签 ios iphone objective-c ios7 automatic-ref-counting

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

相关文章:

ios - 我们可以在 SceneKit 中以编程方式编辑世界空间中 3D 对象的比例吗?

ios - NSData 只有类方法 "NSData.dataWithContentsOfMappedFile(<#path: String#>)"

iphone - 带GUI的Pythonista项目可以做成可执行文件并在iPhone上运行吗?

iphone - 在 iPad 上展示 iAd 和 AdMobAd

ios - 过渡到 SKScene2 后如何在 SKScene1 上进行 'resume' 游戏?

ios - 在 iOS 中用另一个实际图像掩盖透明图像

iphone - deezer-ios 添加静态库

iOS - NSString 定义/初始化。 64 位与 32 位

objective-c - 如何在 iOS 标签栏中使用自定义字体

ios - 解析 : Cannot sign up a user created automatically