调用方法调用的独特方式

时间:2013-09-14 20:06:47

标签: objective-c

我试图理解为什么以下方法在等号后需要调用(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 *)片?

幸运的是,代码使用了特殊的语法,但由于我从未见过这种类型的方法调用,我的脑子想知道在方法调用和初始化器方面是否缺少其他东西。

2 个答案:

答案 0 :(得分:1)

它被称为类型转换,并且它被使用,因为方法dequeueReusableAnnotationViewWithIdentifier:返回类型为MKAnnotationView的对象,并且您想要使用MKPinAnnotationView的实例,它是{{的子类1}}。此转换允许您从方法返回值访问添加到子类的任何方法或属性。

答案 1 :(得分:1)

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