iOS 内存泄漏一次实践

项目背景:项目是一个RN+原生混合项目,其中拍照是在RN进行的,拍照后图片要进行自定义裁剪和黑白素描处理、涂抹,是在原生进行的。当多次(相当多次)拍照处理图片后,iOS会闪退,调试后Xcode打印Message from debugger: Terminated due to memory issue

解决过程相当坎坷,刚开始以为是RN的相机库有内存问题,注释掉原生跳转等多次查看内存变化,最后发现还是原生图片编辑的锅,而且发现问题竟然不是一个原因引起的泄漏,基本上所有会引起泄漏的情况都包含了。。。

1、block循环引用

图片裁剪老板体验要求比较高,项目时间紧,是在一个第三方基础上修改的。可能这个项目是MRC迁移过来的,block里的weakSelf是用__block修饰的。。。解决方法当然是__block改成__weak

2、NSTimer释放

裁剪过程有动画,还用到了定时器控制。要手动释放

3、UIGraphicsBeginImageContextWithOptions之后一定要UIGraphicsEndImageContext()才会释放
自己总结的内存泄漏调试步骤:

1、来回进入返回相关VC看内存变化
2、profile的leak调试
3、注释掉猜测会泄漏的View,查看还是否泄漏,如果不泄漏了可以断定就是这个View在搞事情
4、在这个View里搜一下block、delegate是不是循环引用了。搜一下有没有用NSTimer。搜一下有没有绘图、图片处理需要自己释放的没有释放处理

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 25,482评论 8 249
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 161,777评论 24 692
  • 最近朋友推荐一个K歌的软件,每晚二半夜自己坐沙发上动情演绎,自嗨到不行,港台内地歌手的歌轮番的唱最后还不过瘾开始...
    pmh阅读 145评论 0 0
  • (真真假假)大千世界芸芸生,无奇不有变化新。幻影城下谁主宰,真真假假有谁知。愚人节里愚人笑,渔人码头渔满仓。今天周...
    甘朝武阅读 117评论 0 0
  • 今天是每日反思第58天。 一直在强调,成长是关键。关于如何成长这个问题,我个人认为要搞清楚两个方面,一个是方向,一...
    荒原苍狼阅读 159评论 0 2
  • 季羡林先生的《一花一世界》是由许许多多的故事形成的。每个故事的主人公都不一样,有人有动物。都是在他脑海里留下了深深...
    奈奈奈米酱阅读 40评论 0 0
  • 今天读到一个故事: 曾经有位老教授对着他的学生们做个测试,老教授问:“如果你去山上砍树,正好面前有两棵树,一棵粗,...
    阳子驿站阅读 122评论 0 0