访问的数据类型不是期望的数据类型而产生崩溃。比如,我期望服务端返回string类型,但是后台给我返回的是NSNumber类型,那么我操作时候用到的是string的方法。结果因为找不到对应的方法而崩溃。这类情况是比较常见的,后端传回了空数据,客户端没有做对应的判断继续执行下去了,这样就产生了crash。或者自己本地的某个数据为空数据而去使用了。
解决办法:1、服务端都加入默认值,不返回空内容或无key。或者是在客户端进行非空判断。2、对容易出错的地方提前进行类型判断。
点击事件方法处理不当
这类情况比较常见,比如我的点击事件需要对传入的参数做处理,但是点击时,我传入的对象类型或者传入为空,等到参数进行处理的时候,由于方法不当,产生crash。
当客户端尝试对数组中的数据进行操作的时候,数组为空或者所做的操作index 超过数组本身范围,就会引起崩溃。
下拉刷新时崩溃
使用下拉刷新时,如果下拉的距离长了就会崩溃。原因是,在下拉刷新请求数据之前就将本地数组清空了。分析,下拉刷新的逻辑:1、下拉 2、下拉达到临界值时触发网络请求 3、等待数据加载到本地以后才更新datasource 4、tableview reloadData。
如果先清空数组再下拉请求,后果就是往下拉的距离超过一个 cell 的高度时,table view 的几个委托方法就会被调用,由于 data source 已经被清空,造成错误的内存访问(包括数组越界,访问已销毁的对象)导致 crash。