2013-09-14 3 views
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 *) после знака равенства?

К счастью, код работает со специальным синтаксисом, но, поскольку я никогда не видел этот вызов метода, моя голова задается вопросом, не пропадает ли что-то еще, когда дело доходит до вызовов методов и инициализаторов.

+0

Подумайте о наследовании. Вы знаете, что кенгуру является млекопитающим, но является млекопитающим кенгуру? –

ответ

1

Это называется приведением типов, и он используется, так как метод dequeueReusableAnnotationViewWithIdentifier: возвращает объект типа MKAnnotationView, и вы хотите использовать экземпляр MKPinAnnotationView, который является подклассом MKAnnotationView. Этот листинг позволяет вам получить доступ к любым методам или свойствам, добавленным в подкласс, из возвращаемого значения методов.

1

Это тип отливок. Метод возвращает MKAnnotationView *, но вызывающий лидирует его на MKPinAnnotationView *. Вызывающий считает, что это совместимые типы. Например, возможно, MKPinAnnotationView является подклассом MKAnnotationView.

Смежные вопросы