这是一本关于iphone游戏开发的书。
[((GameState*)viewController.view) Update];
答案 0 :(得分:3)
所有这一切都在告诉编译器“嘿,viewController.view实际上是GameState *类型”。它实际上并没有做任何东西,只是让编译器知道所以它不会警告它。
请注意,像这样欺骗编译器是完全合法的,它会相信你,而不是检查你的工作,所以如果可以的话,最好避免投射。如果你把它投射到它没有的东西上,如果你试图使用它没有的方法它会崩溃。
答案 1 :(得分:1)
这里发生了什么是C型演员:你告诉编译器你知道你的viewController
的{{1}}类型为view
,并且你知道它是可以在这里调用GameState
的方法,即使这些方法不是GameState
接口的一部分。
答案 2 :(得分:1)
意味着viewController的视图被转换为GameState(UIView的子类),这样编译器就不会抱怨调用了Update方法。
这有可能产生运行时错误,所以为了安全起见,我将把前一个语句括在:
if ([viewController.view isKindOfClass:[GameState class]])