【发布时间】: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