我试图理解为什么以下方法在等号后需要调用(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
的实例,它是{{的子类1}}。此转换允许您从方法返回值访问添加到子类的任何方法或属性。
答案 1 :(得分:1)
这是一个类型演员。该方法返回MKAnnotationView *
,但调用者将其强制转换为MKPinAnnotationView *
。调用者假设这些是兼容的类型。例如,MKPinAnnotationView
可能是MKAnnotationView
的子类。