【问题标题】:iPhone crash for feeding base64 to webview将base64馈送到webview的iPhone崩溃
【发布时间】:2016-08-26 08:36:39
【问题描述】:

我正在使用 UIImagePickerController 选择图像/视频,选择后我将资源转换为 base64 字符串并将其发送到 wkwebview

NSData(contentsOfURL:(info[UIImagePickerControllerMediaURL] as? NSURL)!)?.base64EncodedDataWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)

我正在使用 evaluatejavascript

将 base64 字符串发送到 webview

这里是JS函数

function showResource(base64,type){
        if (type == "image"){
            document.getElementById("div1").innerHTML="<img src='data:image/jpeg;base64,"+base64+"' width='100' height='100' alt='No Image'/>";
        }
        else{
            document.getElementById("div1").innerHTML="<video width='320' height='240' controls><source src='data:video/x-m4v;base64,"+base64+"'></video>";
        }
}.

我面临以下问题

  • 有时 webview 中的网页会变为空白
  • 有时应用程序会崩溃
  • 有时设备会进入多个 重启

我在本机代码中找不到任何内存泄漏。我尝试了 Instruments。

  • 尝试在第一次加载时长为 25 秒的视频时它不会崩溃,并且您在 Instruments 中找不到内存泄漏

  • 尝试再次加载相同的视频,结果相同

  • 尝试做同样的事情,这次你会看到设备已离线

    或者,如果我们尝试加载 60 长的视频,它会在第一次时崩溃。

我不确定是什么导致了问题。

当页面变成空白时,我认为可能是 javascript 内存泄漏

但我不认为上述函数会导致内存泄漏,因为我们在同一个变量上重新分配了新的 base64,旧的 base64 应该已经从内存中释放,而且 javascript 是垃圾收集语言。

所以这是矛盾的。

因此 base64 转换可能会占用更多内存,这反过来会导致 iOS 使应用程序崩溃或在最坏的情况下使 iPhone 崩溃,但如果是这种情况,为什么有时 html 页面会变成空白。

所以这也是矛盾的。

感谢任何帮助!

更新:

到目前为止,我的研究表明问题在于 javascript 中的内存泄漏。

【问题讨论】:

  • 我可以知道为什么我被否决了吗?
  • 转换 base64 需要时间,所以使用异步线程进行转换,然后在完成后再分配,这可能会解决空白页问题
  • 好的,我试试看。
  • @ShobhakarTiwari - 它没有解决问题。似乎 JS 内存处理存在问题。为什么内存不断增加而不是被释放
  • 我尝试清除缓存,但也没有用

标签: javascript ios webview memory-leaks base64


【解决方案1】:

如果xcode print "pointer being free was not assigned * set a breakpoint in malloc_error_break to debug" ,尝试关闭safari web viewer。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多