我在我的某个应用中使用了HERE地图。我必须在至少3-4个屏幕上显示地图。因此,有时会在内存中加载3-4个地图实例。
我注意到加载HERE地图的一个实例会占用高达50MB的内存。一旦我移动到其他屏幕,因此加载了两个地图实例。内存跳转到100MB,依此类推。最后在使用一段时间后,应用程序因内存问题而崩溃。
"得到记忆压力通知(关键)2017"
我通过pod添加购买的HERE地图版本。这有什么不同吗?
我注意到的另一件事是,每当我更改HERE地图的框架,即增加/减少其高度时,它似乎重新加载地图,这又会消耗相当多的内存。
任何人都可以通过HERE映射ios版本吗?
答案 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,您可以将其嵌入到需要地图的应用程序的所有其他控制器中。