在APP中使用了UIScrollView+HeaderScaleImage.h,發(fā)現(xiàn)在iOS 8 系統(tǒng)上app中任何的uitableview被釋放之后,再點擊屏幕就會crash,報[UITableView _systemGestureStateChanged:]: message sent to deallocated instance 0x17385200,ios 9 ios 10完全沒有問題
2.后來發(fā)現(xiàn)任何的collectionview被釋放之后,點擊屏幕也會crash,報
[UICollectionView _systemGestureStateChanged:]: message sent to deallocated instance 0x17385200
3.把目光放在UIScrollView上,查找UIScrollView的分類,是否有問題
4.找到 UIScrollView+HeaderScaleImage.h 注釋了其中一部分代碼,并把所有的引用都注釋掉,依然有這個問題。
5.開始將目光放在_systemGestureStateChanged上,還有僵尸對象上,用instrument調(diào)試,依然無解。
6.六個小時過去了。
7.睡了一覺,然后又把目光放在UIScrollView上,將UIScrollView+HeaderScaleImage.h 中的代碼全部注釋掉了。
8.正常。感覺世界都亮了。
9.一步一步注釋,排除,最后發(fā)現(xiàn)這個里面重寫了uiscrollview的dealloc方法,導(dǎo)致scrollview在釋放的時候無法清除自己的觀察者身份,導(dǎo)致系統(tǒng)發(fā)通知的時候仍然能發(fā)到它身上。ios 9 沒問題,ios8上就會直接crash。
10.將最后那個dealloc中的代碼另外立出來,在controller的dealloc中主動調(diào)用這個方法,整個app沒幾個頁面用這個,所以也并沒有增加太多的工作量。