0

FooViewのサブクラスであるというクラスがあり、オブジェクトをUIViewにキャストしようとしています。UIViewFooView

私はこれを次のように行います

FooView *myView = (FooView*) MyViewController.view
NSLog(@"Leg is a class of %@",NSStringFromClass([myView class])); // Get UIView here.

のivarMyViewControllerUIViewタイプです。

UIViewの結果が表示されますが、なぜこれが発生するのでしょうか。

4

2 に答える 2

2

キャストはコンパイル時の操作です。オブジェクトの型を魔法のように変更するわけではありません。これは主に、コンパイル時のチェックと実行時のちょっとした魔法のためのものです。myViewまだ、UIViewではありませんFooView

質問の次の 2 行で、答えが得られるはずです。

MyViewController の ivar は UIView 型です。UIView の結果を取得します

すべての Objective-C オブジェクトには、 というisa型のオブジェクトを指すポインターがありますClass。キャストはそのポインタを変更せず、オブジェクトのサイズも変更しません。

を使用する場合FooViewは、コントローラーでプロパティ タイプを変更する必要があります。Interface Builder を使用している場合は、右側のインスペクターで UIView のタイプを変更します。

于 2012-06-05T16:21:56.763 に答える
0

MyViewController で loadView メソッドを作成して、FooView を作成し、それを self.view に設定できます。NIBを使わないとき用です。

于 2012-06-05T19:40:04.257 に答える