2

iOS 6 MKMapView 似乎正在使用大量内存,当我们开始缩放并在我们的应用程序中使用 Map View 时(大约 7-10 分钟),当我们从具有 MKMapView 的控制器中出来时,它有些不是释放总内存(我在我的应用程序中使用 ARC)。我正在通过 NIB 分配和初始化 MKMapView。

控制器 1 --> 控制器 2(有 MKMapView)

1.5MB -->40-60MB (我用仪器查漏,但没用)

当我回到 Controller1 时,活动字节似乎是 7-10MB,每次访问控制器 2 后,活动字节都会增加大约 2-3MB,一段时间后应用程序崩溃,在控制台中显示“接收到的内存”警告”。有人可以帮忙吗?如果您需要更多信息,请告诉我。提前致谢。

4

1 回答 1

4

这是因为 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];
}
于 2013-04-16T13:53:35.030 回答