HERE的内存压力映射ios

时间:2017-10-31 19:33:38

标签: ios memory maps out-of-memory here-api

我在我的某个应用中使用了HERE地图。我必须在至少3-4个屏幕上显示地图。因此,有时会在内存中加载3-4个地图实例。

我注意到加载HERE地图的一个实例会占用高达50MB的内存。一旦我移动到其他屏幕,因此加载了两个地图实例。内存跳转到100MB,依此类推。最后在使用一段时间后,应用程序因内存问题而崩溃。

"得到记忆压力通知(关键)2017"

我通过pod添加购买的HERE地图版本。这有什么不同吗?

我注意到的另一件事是,每当我更改HERE地图的框架,即增加/减少其高度时,它似乎重新加载地图,这又会消耗相当多的内存。

任何人都可以通过HERE映射ios版本吗?

2 个答案:

答案 0 :(得分:1)

我找到了iOS(HereMap)中释放内存压力的解决方案。

我在应用程序中使用了3张地图(HereMap)屏幕,该解决方案适用于我,释放约100MB的内存。

您需要在viewDidAppear中初始化地图,并在viewDidDisappear中删除地图。

我在应用程序中使用了3个地图,在

中使用了init视图
-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    dispatch_async(dispatch_get_main_queue(), ^{
        if (self->mapView == nil) {
            self->mapView = [[NMAMapView alloc] initWithFrame:self.view.frame];
            [self.view addSubview:self->mapView];
            [self.view sendSubviewToBack:self->mapView];
        }
        [self mapSetup];
    });
}


- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    [self removeMemoryForMapView];
}


-(void)removeMemoryForMapView {

    mapView.positionIndicator.visible = false;
    mapView.landmarksVisible = false;
    mapView.delegate = nil;
    mapView.gestureDelegate = nil;
    mapView.safetySpotsVisible = false;
    [mapView setVisibility:false forPoiCategory:NMAMapPoiCategoryAll];
    [mapView removeFromSuperview];
    mapView = nil;
}

答案 1 :(得分:0)

如果你使用的是MapKit或谷歌地图SDK for iOS,你没有写,但我假设你使用的是本机MapKit。 我不认为这是影响您的应用大小的地图,因为地图缓存是共享的。 MKMapView拥有自己的缓存,其中包含最近显示的地图,因此当设备离线时,您仍然可以显示上次查看的地图。 您可以尝试使用此解决方案清除缓存: How can I clear MKMapView's cache of map tiles?

我建议您创建共享的MapViewController,您可以将其嵌入到需要地图的应用程序的所有其他控制器中。