cod*_*cat 31 memory-leaks memory-management objective-c mkmapview ios
我注意到我的应用程序泄漏了内存,但如果我把MKMapView内存问题消失了.
为了测试这个理论,我做了一个简单的项目,它有一个视图,用一个视图推入一个视图MKMapView并弹出和推动.而已.视图控制器中没有代码,通过故事板完成.
如果我来回地图视图,在推送并弹出带有地图的视图后,它开始大约3MB,大约15倍的内存大约是230MB.
有人见过这个吗?看起来像一个很大的bug.是否有不同的使用方法MKMapView可以防止它泄漏太多?

iAh*_*med 15
我面临着同样的问题,(感谢#1)通过改变其固定MKMapType在 viewWillDisappear和释放/其代理设置为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)
希望这可以帮助
斯威夫特版本:
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)
| 归档时间: |
|
| 查看次数: |
10565 次 |
| 最近记录: |