iOS开发:MKMapView地图内存持续增加的释放解决办法

内存持续增加的释放解决办法

最近修改一个用到MKMapView的项目,内存一直占用过多,每次拖拽地图时还会增加占用,且一直无法释放。

经过两天的排查,最后锁定是创建的self.map对象在加载地图的时候,不断申请内存,但在View的生命期内不会释放。

查阅资料了解到removeFromSuperview可以释放内存,但remove的话地图会从父View上消失。

最后解决办法是在- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated中加入了两行代码

[self.map removeFromSuperview];
[self.view addSubview:mapView];

在移除self.map的同时,重新加载mapView,两行代码就可以达到释放内存的效果。

用Instruments测试显示,之前不能释放的内存可以释放了。下图中的Malloc 4.00MB 即为地图申请的内存,总共申请164M,释放132M后,程序平稳运行时的地图内存只需要28M。

 

后续: 大头针标注的点击事件会出现没有反应,怀疑是remove破坏了响应链,暂未找到解决办法。

 

地图缩放时出现错误提示

Terminating app due to uncaught exception 'NSGenericException', 
reason: '* Collection was mutated while being enumerated.'

原因可能是线程冲突,解决办法是添加标记,避免同时对地图执行操作,可参考:
http://stackoverflow.com/questions/27273211/array-was-mutated-while-being-enumerated-swift

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值