Сбой 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.

Другие вопросы по тегам