前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS中解决后台返回的null导致的崩溃问题--NullSafe

iOS中解决后台返回的null导致的崩溃问题--NullSafe

作者头像
用户1451823
发布2018-09-13 15:42:36
2.2K0
发布2018-09-13 15:42:36
举报
文章被收录于专栏:DannyHoo的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337782

之前在做项目的时候没怎么在意后台返回的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。

启发:敢于去想,多查资料。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年02月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档