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

它被称为类型转换,之所以使用它是因为该方法dequeueReusableAnnotationViewWithIdentifier:返回一个 type 的对象MKAnnotationView,并且您想使用一个MKPinAnnotationView其子类的实例MKAnnotationView。此强制转换允许您从方法返回值访问添加到子类的任何方法或属性。

于 2014-02-24T19:22:02.420 回答
1

这是一个类型转换。该方法返回 a MKAnnotationView *,但调用者将其强制转换为 a MKPinAnnotationView *。调用者假设这些是兼容的类型。例如可能MKPinAnnotationView是 的子类MKAnnotationView

于 2014-02-24T19:23:37.360 回答