zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    swift 获取iphone设备型号
    如何判断静态库是否支持64位
    MAC登录界面多了一个其他账户
    swift4 UIScrollView滑动手势与UIPageViewController冲突解决办法
    swift 保留两位小数以及前面不0
    本地通知
    swift3 UIColor扩展
    swift3 控件创建
    数据库--数据库事务
    数据库---触发器trigger
  • 原文地址:https://www.cnblogs.com/liuliuliu/p/4460329.html
Copyright © 2011-2022 走看看