我们开发APP,虽然在极力避免出现线上crash,但是某些情况还是没法把控,比如和后端约定好的数据格式,突然哪天给你换了,很容易导致crash。但是如果我们在任何地方都做防御性判断,代码会写得特别难受。
之前看到有人开源了防止crash的代码,所以分析了下。这些方案主要利用runtime的方法交换和消息转发来实现,对那些容易引起crash的方法,添加判断,或者在crash之后走消息转发。
解决方案
运行时插入的Object为nil
或者调用一个没有实现的方法
performSegue但是没有在storyboard里面连线
解决办法:
(1). 分析业务避免运行时对象为nil的情况
(2). 使用 _obj ?: @"" 设置对象为nil时的默认值,防止引发Crash
(3). 检查调用的方法是否实现
推荐用无侵入的第三方库来避免这种问题,必要的时候还能结合bugly上报自定义异常https://github.com/jasenhuang/NSObjectSafe
网友评论