iOS中解决后台返回的null导致的崩溃问题--NullSafe
2017-02-03 13:02
603 查看
之前在做项目的时候没怎么在意后台返回的null这个问题,因为只有数据为空的时候后台才可能返回null,而在做项目过程中大多数页面是有数据的,即使没有数据大多数情况下返回的也不是null。然而不怕一万,就怕万一,总会有万一的情况,而这种情况还是出现在了上线之后,一旦返回null就会让App崩溃。后来和后台沟通了一下为什么会返回null,并且希望后台不要返回null。我们的后台使用PHP写的,后台开发人员告诉我,PHP是弱语法,返回的null也是自动生成的,有时返回的是null,有时返回的是“null”字符串,而有时返回的是“”空字符串。后台说之后这些会进行一下统一,尽量不返回null。之后的统一是之后的事,现在还得对null进行处理。
我之前的处理方式是对可能返回null的地方进行一下判断,如果是null就不取值,然而发现这个工程量巨大,而且由于不确定到底哪些地方会返回null,会遗漏某些可能返回null的地方(其实在取数据的时候也可以先判断我们要取的数据是否是我们所需的类型,比如我们要取的数据是字典类型,就判断如果是字典就取值,否则不取值)。于是上网查查是否有人也遇到过类似的问题,以及别人是怎么解决的,没想到真有人也遇到过这种问题,并且有解决方法。
解决后台返回的null导致的崩溃问题就是在项目中导入一个分类:NullSafe。这个分类是一个外国的哥们写的,这个分类大概的作用就是将发送给null对象的消息发送给nil,这样就不会崩溃了。
下面的话都是网上的话,我只是重复一遍。
当我们给null发送消息的时候,会发生崩溃,而给nil发送消息不回发生崩溃。NullSafe这个分类将发送给null的而null又无法处理的消息做了如下几步处理:
1.创建一个方法内存,这个缓存会缓存项目中类的所有类名。
2.遍历缓存,寻找是否已经有可以执行此方法的类。
3.如果有的话,返回这个NSMethodSignature。
4.如果没有的话,返回nil,接下来会走forwardInvocation方法。
5.[invocation invokeWithTarget:nil];将消息转发给nil。
我们还是应该从根源处解决这个问题,我们不应该让后台返回给我们null。
启发:敢于去想,多查资料。
我之前的处理方式是对可能返回null的地方进行一下判断,如果是null就不取值,然而发现这个工程量巨大,而且由于不确定到底哪些地方会返回null,会遗漏某些可能返回null的地方(其实在取数据的时候也可以先判断我们要取的数据是否是我们所需的类型,比如我们要取的数据是字典类型,就判断如果是字典就取值,否则不取值)。于是上网查查是否有人也遇到过类似的问题,以及别人是怎么解决的,没想到真有人也遇到过这种问题,并且有解决方法。
解决后台返回的null导致的崩溃问题就是在项目中导入一个分类:NullSafe。这个分类是一个外国的哥们写的,这个分类大概的作用就是将发送给null对象的消息发送给nil,这样就不会崩溃了。
下面的话都是网上的话,我只是重复一遍。
当我们给null发送消息的时候,会发生崩溃,而给nil发送消息不回发生崩溃。NullSafe这个分类将发送给null的而null又无法处理的消息做了如下几步处理:
1.创建一个方法内存,这个缓存会缓存项目中类的所有类名。
2.遍历缓存,寻找是否已经有可以执行此方法的类。
3.如果有的话,返回这个NSMethodSignature。
4.如果没有的话,返回nil,接下来会走forwardInvocation方法。
5.[invocation invokeWithTarget:nil];将消息转发给nil。
我们还是应该从根源处解决这个问题,我们不应该让后台返回给我们null。
启发:敢于去想,多查资料。
相关文章推荐
- iOS项目中由于后台数据返回null导致的错误解决
- iOS 之后台返回json解析出现的null的解决办法、nil、Nil、NSULL、NULL之间的区别、野指针、内存泄漏、僵尸对象
- iOS项目开发中,对后台返回数据为<null>时候的处理,避免取值产生程序崩溃问题
- iOS 后台返回json解析出现的null的解决办法
- 一行代码解决:服务器返回null导致应用崩溃
- iOS --- 使用runtime解决3D Touch导致UIImagePicker崩溃的问题
- 接口参数如果后台返回"<null>",IOS 前台会崩溃,返回“”OK
- Spark性能优化-------troubleshooting之解决算子函数返回NULL导致的问题
- 完美解决三星手机拍照后横竖屏切换导致的回调为null以致程序崩溃的问题(包括三星note3的特殊适配)
- iOS --- 使用runtime解决3D Touch导致UIImagePicker崩溃的问题
- Android2.3下PopupWindows初始化时NullPointException导致程序崩溃的问题解决
- ios左滑手势返回导致view的frame偏移问题的解决
- 解决返回数据中存在Null而导致的错误问题
- iOS项目开发中,对后台返回数据为<null>时候的处理,避免取值产生程序崩溃问题
- iOS JSON返回的数据有NSNull导致程序崩溃及ios nil、NULL和NSNull的区别
- troubleshooting之解决算子函数返回NULL导致的问题
- 使用dwr同步调用导致无法获取js方法的返回结果问题的解决办法
- IOS使用autoresizingMask导致控件大小异常问题解决
- ios中关于使用arc,并且使用了ASIhttp请求较多发生崩溃问题的解决
- iOS开发 -- 解决IOS CLLocationManager 定位返回旧数据的问题