dsBridge的调用原生函数返回nil的崩溃问题

1.出错原因:

dsBridge调用原生方法出现闪退bug,有的是只在release模式下崩溃等问题。dsBridge出错代码如下:

当执行到ret=action(JavascriptInterfaceObject,sel,arg);语句时,如果原生的函数返回nil,这样就变为ret = nil;这就是奔溃的原因。具体来讲,和调用方法是否有返回值有关;以前也知道performSelector编译器不会对对象,方法,进行检验,会有内存泄露的可能产生;performSelector会把编译时做的事情放到了运行时期,因为不知道即将调用的selector是否有返回值,只有到了运行期才去检测,调用了返回值为Void的一些函数,相当于直接是 id obj = void,当然是OC语法不允许的,直接崩溃是必然的。

链接://www.greatytc.com/p/4a9285c697e7//www.greatytc.com/p/31b38a1369e2

2.解决方法:

定义调用OC或swift方法时,要返回非nil的值,这样就不会崩溃了!

如下图:-> 中的String不要用Void或者可选类型,return一定为不为nil的值。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 1.设计模式是什么? 你知道哪些设计模式,并简要叙述?设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型...
    龍飝阅读 2,234评论 0 12
  • 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的...
    iOS菜鸟大大阅读 759评论 0 1
  • 1.设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类...
    司马DE晴空阅读 1,347评论 0 7
  • 01 上初中时,班上学习成绩名列前茅的都是女孩子。但教我们化学的男老师嘴角划过一丝嘲弄:“初中的知识比较简单,需要...
    小太阳下的乌龟阅读 445评论 2 3