0

次のメソッド呼び出しで等号の後に (MKPinAnnotationView *) が必要な理由を理解しようとしています。

このメソッドの定義は、MKMapView.h ヘッダーにあります。

/ Used by the delegate to acquire an already allocated annotation view, in lieu of allocating a new one.
- (MKAnnotationView *)dequeueReusableAnnotationViewWithIdentifier:(NSString *)identifier;

このメソッドのサンプル呼び出しを見ると、次の構文が表示されます。

MKPinAnnotationView *view = (MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:kPinIdentifier];

メソッドが MKAnnotationView オブジェクトを返す場合。次のメソッド呼び出しを記述できないのはなぜですか。

MKPinAnnotationView *view = [mapView dequeueReusableAnnotationViewWithIdentifier:kPinIdentifier];

等号の左側に MKAnnotationView オブジェクトがある場合、等号の後とメソッド呼び出しの前の (MKPinAnnotationView*) の目的は何ですか?

また、等号の後に (MKPinAnnotationView*) ピースの使用を強制しているメソッドの定義は何ですか?

幸いなことに、コードは特別な構文で動作しますが、このタイプのメソッド呼び出しを見たことがないので、メソッド呼び出しと初期化子に関して何か他のものが欠けているのではないかと頭を悩ませています。

4

2 に答える 2

1

型キャストです。メソッドは を返しますMKAnnotationView *が、呼び出し元はそれを にキャストしていMKPinAnnotationView *ます。呼び出し元は、これらが互換性のある型であると想定しています。たとえば、多分MKPinAnnotationViewのサブクラスですMKAnnotationView

于 2014-02-24T19:23:37.360 に答える
1

これは型キャストと呼ばれ、メソッドdequeueReusableAnnotationViewWithIdentifier:が type のオブジェクトを返し、のサブクラスであるMKAnnotationViewのインスタンスを使用するために使用されます。このキャストにより、メソッドの戻り値からサブクラスに追加されたメソッドまたはプロパティにアクセスできます。MKPinAnnotationViewMKAnnotationView

于 2014-02-24T19:22:02.420 に答える