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 の型キャストです。 の型が であることを知っており、これらのメソッドが の一部でなくても、 here のメソッドを呼び出してもよいことがわかっていることをコンパイラにviewController伝えviewていますGameState。インターフェース。GameStateUIView

于 2013-09-02T18:56:50.277 に答える
1

viewController のビューが GameState (UIView のサブクラス) にキャストされることを意味し、このようにして、コンパイラは Update メソッドが呼び出されたことを訴えません。

これには実行時エラーが発生する可能性があるという不都合があるため、安全のために前のステートメントを次のように囲みます。

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