首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一段时间后,iOS 6 MKMapView内存泄漏和应用程序崩溃

一段时间后,iOS 6 MKMapView内存泄漏和应用程序崩溃
EN

Stack Overflow用户
提问于 2013-04-10 18:09:47
回答 1查看 4.5K关注 0票数 2

iOS 6 MKMapView似乎使用了大量的内存,当我们开始在我们的应用程序中缩放和玩地图视图时(大约7-10分钟),当我们走出带有MKMapView的控制器时,它是如何不释放总内存的(我在我的应用程序中使用ARC )。我正在通过NIB分配和初始化MKMapView。

控制器1-->控制器2(具有MKMapView)

1.5MB -->40-60MB (我已经使用仪器找出了泄漏,但没有用处)

当我回到Controller1时,活动字节似乎是7-10MB,在每次访问控制器2之后,活动字节增加了大约2-3MB,一段时间后,它使应用程序崩溃,在控制台中它显示“收到内存警告”。有谁能帮忙吗?如果你需要更多的信息,请让我知道。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-04-16 21:53:35

这是因为MKMapView的工作方式。有一个挂起的操作,所以MapKit保留了MKMapView,但它实际上还没有被释放。这本身并不是问题。问题是它仍然在向你的代理发送消息。

解决方法很简单:作为视图控制器清理的一部分,将映射视图的委托设置为nil,这将阻止MKMapView向其发送消息。

MKMapViewDelegate协议参考中记录了这一点:

在释放已为其设置委托的MKMapView对象之前,请记住将该对象的委托属性设置为空。您可以在dealloc方法中执行此操作,在该方法中可以处理地图视图。

编辑:也给Oscar一张赞成票,就在下面,谁提供了这里的文档引用。

在给定ARC的情况下,我建议您在视图控制器的dealloc中将map view的委托设置为nil。

你可以做一些这样的事情来解决我的问题。改变地图的类型也会有所帮助。

代码语言:javascript
复制
- (void)applyMapViewMemoryHotFix{

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

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

        break;
    default:
        break;
}
self.mapView.showsUserLocation = NO;
self.mapView.delegate = nil;
[self.mapView removeFromSuperview];
self.mapView = nil;
}

-(void)viewDidDisappear:(BOOL)animated
{
    [self applyMapViewMemoryHotFix];
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15922927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档