IOS Ошибка памяти Safari при загрузке/выгрузке HTML5 <video>

Я разработал iPad-приложение с несколькими UIWebViews, которое использует следующие HTML и JavaScript. Поскольку iPad может воспроизводить только одно видео за раз, я не загружаю видео до тех пор, пока не будет сфокусировано конкретное веб-представление.

Это делается путем вызова метода stringByEvaluatingJavaScriptFromString в UIWebView, отправляя вызов метода JS getFocus(). Точно так же, когда веб-просмотр больше не нужен, я вызываю lostFocus(), чтобы выгрузить видео. Это позволяет другому UIWebView воспроизводить другое видео.

До сих пор так хорошо. Все работает отлично. За исключением одного: Это вызывает утечку памяти. При просмотре

Я попытался перезагрузить UIWebView (вместо выгрузки видео с помощью JS), это не сработало. Я также попробовал миллион различных вариаций JavaScript, вариантов тегов и т.д.

<div id="videoDiv"></div>

<script type="text/javascript">
    var movieDiv = document.getElementById('videoDiv'),
        movieHtml = '<video id="video" src="../Documents/<%= VideoFileName %>" width="768" height="911"></video>';

    var gotFocus = function () {
        movieDiv.innerHTML = movieHtml;
        var movie = document.getElementById('video');
        movie.play();
        movie.addEventListener('pause', function () {
            movie.currentTime = 0;
            movie.play();
        }, false);
    };
    var lostFocus = function () {
        movieDiv.innerHTML = '';
    };
</script>

Ответы

Ответ 1

Я, наконец, решил это! Решение заключалось в том, чтобы удалить src и "загрузить" несуществующее видео. Это не вызывает утечки памяти. Посмотрите:

<div id="videoDiv"></div>

<script type="text/javascript">
    var movieDiv = document.getElementById('videoDiv'),
        movieHtml = '<video id="video" src="" width="768" height="911"></video>';

    movieDiv.innerHTML = movieHtml;
    var movie = document.getElementById('video');

    var gotFocus = function () {
        movie.src = '../Documents/<%= VideoFileName %>';
        movie.load();
        movie.play();
        movie.addEventListener('pause', function () {
            movie.currentTime = 0;
            movie.play();
        }, false);
    };
    var lostFocus = function () {
        movie.src = '';
        movie.load(); // This line may be removed, see comments
    };
</script>