在APP中使用了UIScrollView+HeaderScaleImage.h,发现在iOS 8 系统上app中任何的uitableview被释放之后,再点击屏幕就会crash,报[UITableView _systemGestureStateChanged:]: message sent to deallocated instance 0x17385200,ios 9 ios 10完全没有问题
2.后来发现任何的collectionview被释放之后,点击屏幕也会crash,报
[UICollectionView _systemGestureStateChanged:]: message sent to deallocated instance 0x17385200
3.把目光放在UIScrollView上,查找UIScrollView的分类,是否有问题
4.找到 UIScrollView+HeaderScaleImage.h 注释了其中一部分代码,并把所有的引用都注释掉,依然有这个问题。
5.开始将目光放在_systemGestureStateChanged上,还有僵尸对象上,用instrument调试,依然无解。
6.六个小时过去了。
7.睡了一觉,然后又把目光放在UIScrollView上,将UIScrollView+HeaderScaleImage.h 中的代码全部注释掉了。
8.正常。感觉世界都亮了。
9.一步一步注释,排除,最后发现这个里面重写了uiscrollview的dealloc方法,导致scrollview在释放的时候无法清除自己的观察者身份,导致系统发通知的时候仍然能发到它身上。ios 9 没问题,ios8上就会直接crash。
10.将最后那个dealloc中的代码另外立出来,在controller的dealloc中主动调用这个方法,整个app没几个页面用这个,所以也并没有增加太多的工作量。
网友评论