【问题标题】:Memory pressure with HERE maps ios使用 HERE 映射 ios 的内存压力
【发布时间】:2018-04-13 02:05:10
【问题描述】:

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

我注意到加载一个 HERE 地图实例会消耗多达 50MB 的内存。一旦我移动到其他屏幕,就会加载两个地图实例。内存跳到 100MB 等等。最后在使用一段时间后,应用程序因内存问题而崩溃。

“收到内存压力通知(严重)2017”

我正在通过 pod 添加购买的 HERE 地图版本。有什么区别吗?

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

有遇到过 HERE maps ios 版本的人吗?

【问题讨论】:

  • 我也看到了这个问题。你有没有找到解决这个问题的方法?
  • 没有。我还没有找到任何解决方案。
  • @Saira 你找到解决方案了吗?我在这里地图(iOS)SDK也有这个问题。内存使用量:617MB,能源影响:高,如果您找到任何解决方案,请告诉我。
  • 没有 Vivik。不幸的是,我无法找到任何解决方案。
  • @Saira,请检查以下代码,我在 iOS (HereMap) 中找到了释放内存压力的解决方案,请让我知道此解决方案是否有效,就我而言,此解决方案有效并释放大约 100MB 的内存。

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


【解决方案1】:

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

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

【讨论】:

  • 不,我没有使用 Google 或 Apple 地图。我在我的问题中提到我正在使用 HERE maps sdk。但这可能不太明显。我已经编辑了我的问题以使其更清楚。
【解决方案2】:

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

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

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

我在我的应用程序中使用 3 个地图并在

中使用初始化视图
-(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;
}

【讨论】:

    猜你喜欢
    • 2014-09-01
    • 2014-09-21
    • 2015-09-22
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    相关资源
    最近更新 更多