Утечка памяти в iOS при загрузке изображений с внешнего URL-адреса и использовании createObjectURL revokeObjectURL

У меня есть веб-приложение, которое загружает изображения из zip-файла и последовательно их отображает.
ZIP-файл может хранить множество изображений.
Чтобы предотвратить нехватку памяти, память управляется путем очистки памяти от предыдущих изображений перед показом следующего изображения.
Это делается:

  • установка буфера в ноль.
  • отзыв URL-адреса объекта и установка нулевого URL -адреса.

Этот подход хорошо работает на различных ОС, таких как Windows, Linux и MacOS .
Но на iOS это не работает.

Я сузил проблему до создания и очистки URL-адреса от блоба. Чтобы упростить отладку, я удалил использование zip-файла и вместо этого загружал изображения с внешнего URL-адреса.

Чтобы имитировать поведение при загрузке из zip-файла, я искусственно извлекаю большой двоичный объект из URL-адреса, создаю URL-адрес объекта с помощью createObjectURL и очищаю URL-адрес объекта с помощью revokeObjectURL.

В идеале не должно быть утечки памяти, так как я очищаю URL-адрес объекта, но она есть.
После конечного числа изображений загрузка завершается ошибкой.

Пример проблемы можно увидеть здесь:https://jsfiddle.net/avnerm/vd8cwy9g/5/

Установка для переменной doDebugMemoryLeakOn_iOS_withRevoke значения true активирует команды

      URL.createObjectURL();
URL.revokeObjectURL();

которые вызывают проблему, через некоторое время.
Программа должна загрузить ~3000 изображений, но останавливается раньше на устройствах iOS (после ~400 изображений на моем iPad Pro).

Это происходит на различных устройствах iOS (например , iPad, iPhone8) с различными версиями iOS (iOS 15.2, iOS 14.8.1) при воспроизведении в различных браузерах (например , Safari, Chrome, Firefox) примерно после 1000 изображений.
Это также происходит в родном приложении iOS, которое использует WKWebView .
Я подозреваю, что может быть проблема с движком браузера WKWebView, который является общим для всех этих браузеров.

Может ли это указывать на ошибку в WKWebView?
Как это можно исправить или обойти?

Соответствующий вопрос также был размещен на форуме Apple Development, и была зарегистрирована ошибка Webkit .

Спасибо

0 ответов

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