dsBridge的调用原生函数返回nil的崩溃问题
2019-08-20 本文已影响0人
苍眸之宝宝
1.出错原因:
dsBridge调用原生方法出现闪退bug,有的是只在release模式下崩溃等问题。dsBridge出错代码如下:

当执行到ret=action(JavascriptInterfaceObject,sel,arg);语句时,如果原生的函数返回nil,这样就变为ret = nil;这就是奔溃的原因。具体来讲,和调用方法是否有返回值有关;以前也知道performSelector编译器不会对对象,方法,进行检验,会有内存泄露的可能产生;performSelector会把编译时做的事情放到了运行时期,因为不知道即将调用的selector是否有返回值,只有到了运行期才去检测,调用了返回值为Void的一些函数,相当于直接是 id obj = void,当然是OC语法不允许的,直接崩溃是必然的。
链接:https://www.jianshu.com/p/4a9285c697e7;https://www.jianshu.com/p/31b38a1369e2
2.解决方法:
定义调用OC或swift方法时,要返回非nil的值,这样就不会崩溃了!
如下图:-> 中的String不要用Void或者可选类型,return一定为不为nil的值。
