? ? ? ? 上星期碰到一個(gè)bug,每次都直接crack到main函數(shù)里,因?yàn)榇a涉及到 imageV.image = image.change() 的問題,隱約知道有可能出現(xiàn)在內(nèi)存問題上,由于某個(gè)功能實(shí)現(xiàn)需要整理,暫時(shí)放了一邊,今天再次碰到,發(fā)現(xiàn)如果不解決會(huì)導(dǎo)致下面的擴(kuò)展實(shí)現(xiàn)不了,確實(shí)要命。

? ? ? ? 既然crack到了main函數(shù),也提示了EXC_BAD_ACCESS這個(gè)錯(cuò)誤,那就Google關(guān)鍵詞EXC_BAD_ACCESS,照著EXC_BAD_ACCESS的本質(zhì)詳解以及僵尸模式調(diào)試原理里的對(duì)了一下,最后對(duì)比代碼,看到錯(cuò)誤涉及到的代碼中的對(duì)象不是OC對(duì)象,所以只能看代碼,因?yàn)橄胫婕皟?nèi)存問題,所以先使用Xcode的靜態(tài)內(nèi)存分析,發(fā)現(xiàn)了以下問題:
? ? ? ? 1、decrement of the reference count of an object that is not owned at this point by the caller


按字面意思,就是release錯(cuò)了,而且Xcode也給了個(gè)箭頭直接標(biāo)出問題所在了,標(biāo)出的第一次說了該對(duì)象是一個(gè)引用計(jì)數(shù)器為0的對(duì)象,那下面就不需要release了
? ? ? ? 2、Potential leak of an object stored into 'maskRef'

按字面意思是創(chuàng)建了一個(gè)引用計(jì)數(shù)器為1的對(duì)象,后面leak說對(duì)象被創(chuàng)建和存儲(chǔ)在了maskRef中,而這些對(duì)象不是OC對(duì)象,只能手動(dòng)release了