gpt4 book ai didi

javascript - iPhone 因向 webview 提供 base64 导致崩溃

转载 作者:行者123 更新时间:2023-11-28 05:38:21 28 4
gpt4 key购买 nike

我正在使用 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 中的网页会变成空白
  • 有时应用程序会崩溃
  • 有时设备会进入多个状态重新启动

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

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

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

  • 尝试执行相同的操作,这次您会看到设备已离线

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

我不确定是什么原因导致了这个问题。

由于页面变成空白,我认为这可能是 JavaScript 内存泄漏

enter image description here

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

所以这是矛盾的。

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

所以这也是矛盾的。

感谢任何帮助!

更新:

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

最佳答案

如果 xcode 打印“未分配指针被释放*在 malloc_error_break 中设置断点进行调试”,请尝试关闭 safari Web 查看器。

关于javascript - iPhone 因向 webview 提供 base64 导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39161935/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com