美文网首页
JavascriptCore 调用 callWithArgume

JavascriptCore 调用 callWithArgume

作者: oneYing | 来源:发表于2018-07-23 20:19 被阅读337次

最近接手一个工程。使用的JavascriptCore架构与js交互。由于数据请求都在原生这边,所以交互很频繁,经常在短时间内就会发生多次oc->js->oc 或者js->oc->js的调用。其中在有些页面,当oc通过callWithArguments方法调用js方法时,就会报bad_access 的crash. 而此时xcode只会显示一堆堆栈信息,且每次crash的信息都不一样,有时是webcore_WTF stackoverflow,有时候是webcore renderblock. 根据这些信息只能看出是webview在渲染加载html时出错。
一开始我觉得可能是调用js方法时是异步调用产生的,改为同步后也无效。再就是各种猜也没猜对。猜不对也就只好google了。在翻了好多页,改了多次关键词之后,终于在 Unreproducible webcore crashes找到了答案。评论里的这位朋友与我的一样

屏幕快照 2018-07-23 下午8.03.27.png

于是我将工程中所有调用oc调用js的方法里加入了setTimeout函数

function OCToJS(message) {
    setTimeout(function () {
              // js todo
               }, 10)
}

在我搜索问题中,也发现有好多人遇到过类似的问题。但他们的解决方式于我并不适用,但也这里记录下来。
1、评论里的哥们把开源库中,崩溃的位置找到了
javascript源码
2、使用了cordova第三方库的
使用这个库且在css里设置了box-shadow 属性

另外,在调用callWithArguments时,我传的对象要等好久才会被释放,我查好多资料都没有找到解决方法,看似是框架的设计本是如此。

相关文章

网友评论

      本文标题:JavascriptCore 调用 callWithArgume

      本文链接:https://www.haomeiwen.com/subject/fgzjmftx.html