0

这是一本关于iphone游戏开发的书。

[((GameState*)viewController.view) Update]; 

“viewController”是UIViewcontroller的一个实例,“GameState”是UIView的子类,“Update”是“GameState”的一个方法。你能告诉我发生了什么吗?这种语法是否允许 viewController 使用 GameState 的方法?如果这是一个愚蠢的问题,我深表歉意。

4

3 回答 3

3

所做的只是告诉编译器“嘿,viewController.view 实际上是 GameState* 类型”。它实际上并没有对它任何事情,只是让编译器知道,所以它不会警告它。

请注意,像这样对编译器撒谎是完全合法的,它会相信你,不会检查你的工作,所以如果可以的话,最好避免强制转换。如果你把它转换成它不是的东西,如果你尝试使用它没有的方法,它就会崩溃。

于 2013-09-02T18:56:21.903 回答
1

这里发生的是 C 类型转换:你告诉编译器你知道你viewController的 'sview是 type GameState,并且你知道调用GameState这里的方法是可以的,即使这些方法不是UIView's 的一部分界面。

于 2013-09-02T18:56:50.277 回答
1

意味着 viewController 的视图被强制转换为 GameState(UIView 的子类),这样编译器就不会抱怨调用了 Update 方法。

这有可能产生运行时错误的不便,所以为了安全起见,我将把前面的语句附在:

if ([viewController.view isKindOfClass:[GameState class]]) 
于 2013-09-02T18:57:07.690 回答