-[UITextField textInputView]: message sent to deallocated instance 0x1018beca0
今天突然收到測(cè)試說,我們項(xiàng)目在 iOS 8 下轮锥,點(diǎn)擊某個(gè) UITextField 會(huì)有閃退,經(jīng)過測(cè)試發(fā)現(xiàn)確實(shí)是的更米,但是在 iOS 9下和 iOS 7下是好的窜骄,然后我就分析原因蛾魄,首先通過打開 Enable Zombie Objects,產(chǎn)生錯(cuò)誤信息逛拱。敌厘。。
一開始確實(shí)各種分析內(nèi)存問題朽合,硬是覺的寫的沒問題啊俱两,后來將其抽離出來饱狂,發(fā)現(xiàn)還是一直崩,最后通過群里的朋友的提醒 和 http://stackoverflow.com/questions/35715601/uitextfield-textinputview-message-sent-to-deallocated-instance 才發(fā)現(xiàn)自己寫的 Category中可能是某個(gè)監(jiān)聽沒有移除掉導(dǎo)致的宪彩。
但實(shí)際上那個(gè)里面的通知休讳,我都移除掉啦,不懂尿孔,否則 iOS 9下為什么是好的呢俊柔,最后無奈只有先將那個(gè) category 中 dealloc 方法先注釋掉,這樣才沒事啦活合。
總結(jié)雏婶,此處毫無疑問還是內(nèi)存問題,分析問題時(shí)不能只看當(dāng)前類芜辕,還要注意看看引用的 Category 的尚骄,同時(shí)從監(jiān)聽等方面多考慮。但是此處 iOS8 和 iOS 9的內(nèi)存處理可能確實(shí)有點(diǎn)不同侵续,對(duì)于特殊點(diǎn)的坑記住下。
PS:[Object retain]: message sent to deallocated instance 此類問題也類似
上述分析一般是某個(gè) object 被 dealloc 掉后憨闰,結(jié)果還有在用它就導(dǎo)致問題了状蜗,所以此類問題首先要分析誰用了它,特別是被強(qiáng)引用的地方鹉动,一一排查轧坎,一步一步找。不過有時(shí)也不能一下子定位到準(zhǔn)確的位置泽示,可借鑒解決LLDB模式下出現(xiàn)message sent to deallocated instance錯(cuò)誤缸血。