这是因为 MKMapView 的工作方式。有一个操作挂起,所以 MapKit 保留了 MKMapView,它实际上还没有被释放。这本身不是问题。问题是它仍在向您的代表发送消息。
解决方法很简单:作为视图控制器清理的一部分,将地图视图的委托设置为 nil,这将阻止 MKMapView 向其发送消息。
这记录在 MKMapViewDelegate 协议参考中:
在释放您已为其设置委托的 MKMapView 对象之前,请记住将该对象的委托属性设置为 nil。您可以在其中处理地图视图的 dealloc 方法中执行此操作。
编辑:也给 Oscar 一个赞成票,就在下面,谁在这里提供了文档报价。
鉴于 ARC,我建议这意味着您应该在视图控制器的 dealloc 中将地图视图的委托设置为 nil。
你可以做一些这样的事情来解决我的问题。更改地图类型也有帮助。
- (void)applyMapViewMemoryHotFix{
switch (self.mapView.mapView.mapType) {
case MKMapTypeHybrid:
{
self.mapView.mapView.mapType = MKMapTypeStandard;
}
break;
case MKMapTypeStandard:
{
self.mapView.mapView.mapType = MKMapTypeHybrid;
}
break;
default:
break;
}
self.mapView.showsUserLocation = NO;
self.mapView.delegate = nil;
[self.mapView removeFromSuperview];
self.mapView = nil;
}
-(void)viewDidDisappear:(BOOL)animated
{
[self applyMapViewMemoryHotFix];
}