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。搜一下有没有绘图、图片处理需要自己释放的没有释放处理

你可能感兴趣的:(iOS 内存泄漏一次实践)