Сбой iPhone при подаче base64 на веб-просмотр
Я использую UIImagePickerController для выбора изображения / видео, после выбора я конвертирую ресурс в строку base64 и отправляю его в wkwebview
NSData(contentsOfURL:(info[UIImagePickerControllerMediaURL] as? NSURL)!)?.base64EncodedDataWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
Я отправляю строку base64 в веб-браузер с помощью valujavascript
Вот функция 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>";
}
}.
Я сталкиваюсь со следующими проблемами
- иногда веб-страница, которая находится в веб-представлении, становится пустой
- иногда приложение падает
- иногда устройство переходит в несколько перезагрузок
Я не смог найти утечки памяти в нативном коде. Я попробовал инструменты.
- попробуйте загрузить видео длительностью 25 секунд в первый раз, когда оно не вылетит, и вы не можете найти утечку памяти в инструментах
- попробуйте загрузить то же видео еще раз результаты те же
попробуйте сделать то же самое, на этот раз вы увидите, что устройство отключилось
или если мы попытаемся загрузить видео длиной 60, оно само вылетит в первый раз.
Я не уверен, что является причиной проблемы.
Поскольку страница становится пустой, это может быть утечка памяти JavaScript, я думал
Но я не думаю, что вышеупомянутая функция может вызвать утечку памяти, так как мы переназначаем новую base64 на ту же переменную, более старая base64 должна была быть освобождена из памяти, и, кроме того, javascript - это язык для сборки мусора.
так что это противоречит.
поэтому преобразование base64 может занять больше памяти, что, в свою очередь, приводит к сбою приложения в iOS или к сбою iPhone также в худшем случае, но если это так, почему иногда HTML-страница становится пустой.
так что это тоже противоречит.
Любая помощь приветствуется!
Обновить:
До сих пор в моих исследованиях было показано, что проблема в утечке памяти в javascript.
1 ответ
Если печать xcode "освобожденный указатель не был выделен *, установите точку останова в malloc_error_break для отладки", попробуйте отключить браузер safari.