阻止iOS 7 MKMapView泄漏内存

cod*_*cat 31 memory-leaks memory-management objective-c mkmapview ios

我注意到我的应用程序泄漏了内存,但如果我把MKMapView内存问题消失了.

为了测试这个理论,我做了一个简单的项目,它有一个视图,用一个视图推入一个视图MKMapView并弹出和推动.而已.视图控制器中没有代码,通过故事板完成.

如果我来回地图视图,在推送并弹出带有地图的视图后,它开始大约3MB,大约15倍的内存大约是230MB.

有人见过这个吗?看起来像一个很大的bug.是否有不同的使用方法MKMapView可以防止它泄漏太多?

在此输入图像描述

iAh*_*med 15

我面临着同样的问题,(感谢#1)通过改变其固定MKMapTypeviewWillDisappear和释放/其代理设置为nil.As它仍然发送消息给与会代表.这在MKMapViewDelegate协议参考中有记录:

在释放已设置委托的MKMapView对象之前,请记住将该对象的委托属性设置为nil.您可以在dealloc方法中处理地图视图

.

-(void)viewWillDisappear:(BOOL)animated{
  [super viewWillDisappear:animated];
  [self applyMapViewMemoryFix];

}

- (void)applyMapViewMemoryFix{

switch (self.mkMapView.mapType) {
    case MKMapTypeHybrid:
    {
        self.mkMapView.mapType = MKMapTypeStandard;
    }

        break;
    case MKMapTypeStandard:
    {
        self.mkMapView.mapType = MKMapTypeHybrid;
    }

        break;
    default:
        break;
}
self.mkMapView.showsUserLocation = NO;
self.mkMapView.delegate = nil;
[self.mkMapView removeFromSuperview];
self.mkMapView = nil;
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助

  • 没有帮助.还在漏水. (5认同)
  • 我们有任何更新吗?它的2018年仍然在泄漏.@durazno (3认同)

fed*_*608 6

斯威夫特版本:

override func viewWillDisappear(_ animated:Bool) {
    super.viewWillDisappear(animated)
    self.applyMapViewMemoryFix()
}

func applyMapViewMemoryFix() {
    switch (self.mapView.mapType) {
    case MKMapType.hybrid:
        self.mapView.mapType = MKMapType.standard
    case MKMapType.standard:
        self.mapView.mapType = MKMapType.hybrid
    default:
        break
    }
    self.mapView.showsUserLocation = false
    self.mapView.delegate = nil
    self.mapView.removeFromSuperview()
    self.mapView = nil
}
Run Code Online (Sandbox Code Playgroud)

  • 即使我实现了你的解决方案,我在 iOS 8.3/8.4 中仍然遇到内存问题 (4认同)