84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
ios的mkmapview在zoom时内存会暴涨,并且降不下来。我在网上搜了很多,也尝试了很多解决方案,比如切换地图显示模式(MKMapType)、不用时释放掉地图。但是并没有明显的解决缩放时的内存问题。
认证高级PHP讲师
這個記憶體會暴漲到大幾十兆吧,是正常的。
mapview使用的是tiledLayer(瓦片Layer),為了渲染速度,會在記憶體中快取地圖的圖塊。 縮放的時候,地圖圖塊在不同層次都會快取。
我猜想內存吃緊的時候,MKMapView應該會自己清理緩存,所以我覺得不用操心這個題。
PS:1 這是stackoverflow給的方案,真不懂為啥。
- (void)applyMapViewMemoryHotFix{ switch (self.mapView.mapType) { case MKMapTypeHybrid: { self.mapView.mapType = MKMapTypeStandard; } break; case MKMapTypeStandard: { self.mapView.mapType = MKMapTypeHybrid; } break; default: break; } self.mapView.mapType = MKMapTypeStandard; } -(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated { [self applyMapViewMemoryHotFix]; }
PS:
個人比較傾向於
override func viewDidDisappear(animated: Bool) { super.viewDidDisappear(animated) mapView.removeFromSuperview() }
在viewDidDisappear方法中把map釋放,然後在需要他的時候,重新初始化。
已找到解決方案:
在mapview的regionDidChange方法中,判斷map.zoomLevel如果小於一定範圍就交替mapType
這樣可以有效降低記憶體峰值。
因為當地圖縮小到一定範圍,上面的商舖之類的細節早就應該清除掉,以節省內存。
這樣可以有效降低記憶體峰值。 是怎麼做的? ? ? ? ? mapView 有 zoomLevel 這個屬性嗎? ? ?
這個記憶體會暴漲到大幾十兆吧,是正常的。
mapview使用的是tiledLayer(瓦片Layer),為了渲染速度,會在記憶體中快取地圖的圖塊。
縮放的時候,地圖圖塊在不同層次都會快取。
我猜想內存吃緊的時候,MKMapView應該會自己清理緩存,所以我覺得不用操心這個題。
PS:1 這是stackoverflow給的方案,真不懂為啥。
PS:
個人比較傾向於
在viewDidDisappear方法中把map釋放,然後在需要他的時候,重新初始化。
已找到解決方案:
在mapview的regionDidChange方法中,判斷map.zoomLevel如果小於一定範圍就交替mapType
這樣可以有效降低記憶體峰值。
因為當地圖縮小到一定範圍,上面的商舖之類的細節早就應該清除掉,以節省內存。
在mapview的regionDidChange方法中,判斷map.zoomLevel如果小於一定範圍就交替mapType
這樣可以有效降低記憶體峰值。
是怎麼做的? ? ? ? ? mapView 有 zoomLevel 這個屬性嗎? ? ?