項(xiàng)目背景:項(xiàng)目是一個RN+原生混合項(xiàng)目,其中拍照是在RN進(jìn)行的,拍照后圖片要進(jìn)行自定義裁剪和黑白素描處理、涂抹,是在原生進(jìn)行的。當(dāng)多次(相當(dāng)多次)拍照處理圖片后,iOS會閃退,調(diào)試后Xcode打印Message from debugger: Terminated due to memory issue
解決過程相當(dāng)坎坷,剛開始以為是RN的相機(jī)庫有內(nèi)存問題,注釋掉原生跳轉(zhuǎn)等多次查看內(nèi)存變化,最后發(fā)現(xiàn)還是原生圖片編輯的鍋,而且發(fā)現(xiàn)問題竟然不是一個原因引起的泄漏,基本上所有會引起泄漏的情況都包含了。。。
1、block循環(huán)引用
圖片裁剪老板體驗(yàn)要求比較高,項(xiàng)目時間緊,是在一個第三方基礎(chǔ)上修改的??赡苓@個項(xiàng)目是MRC遷移過來的,block里的weakSelf是用__block修飾的。。。解決方法當(dāng)然是__block改成__weak
2、NSTimer釋放
裁剪過程有動畫,還用到了定時器控制。要手動釋放
3、UIGraphicsBeginImageContextWithOptions之后一定要UIGraphicsEndImageContext()才會釋放
自己總結(jié)的內(nèi)存泄漏調(diào)試步驟:
1、來回進(jìn)入返回相關(guān)VC看內(nèi)存變化
2、profile的leak調(diào)試
3、注釋掉猜測會泄漏的View,查看還是否泄漏,如果不泄漏了可以斷定就是這個View在搞事情
4、在這個View里搜一下block、delegate是不是循環(huán)引用了。搜一下有沒有用NSTimer。搜一下有沒有繪圖、圖片處理需要自己釋放的沒有釋放處理