终极解决办法:https://github.com/jeffasd/UITextView-Placeholder


-[UITextField textInputView]: message sent to deallocated instance 0x1018beca0

今天突然收到测试说,我们项目在 iOS 8 下,点击某个 UITextField 会有闪退,经过测试发现确实是的,但是在 iOS 9下和 iOS 7下是好的,然后我就分析原因,首先通过打开 Enable Zombie Objects,产生错误信息。。。




打开 Enable Zombie Objects


一开始确实各种分析内存问题,硬是觉的写的没问题啊,后来将其抽离出来,发现还是一直崩,最后通过群里的朋友的提醒 和http://stackoverflow.com/questions/35715601/uitextfield-textinputview-message-sent-to-deallocated-instance 才发现自己写的 Category中可能是某个监听没有移除掉导致的。

将那个 category 中 dealloc 方法先注释掉,这样才没事啦。

总结,此处毫无疑问还是内存问题,分析问题时不能只看当前类,还要注意看看引用的 Category 的,同时从监听等方面多考虑。但是此处 iOS8 和 iOS 9的内存处理可能确实有点不同,对于特殊点的坑记住下。

PS:[Object retain]: message sent to deallocated instance 此类问题也类似

上述分析一般是某个 object 被 dealloc 掉后,结果还有在用它就导致问题了,所以此类问题首先要分析谁用了它,特别是被强引用的地方,一一排查,一步一步找。不过有时也不能一下子定位到准确的位置,可借鉴解决LLDB模式下出现message sent to deallocated instance错误。

http://www.cocoachina.com/bbs/read.php?tid-318678-page-1.html