0

我有一个网络应用程序,它从 zip 文件加载图像,并连续显示它们。
zip 文件可以存储许多图像。
为了防止内存不足,管理内存,方法是在显示下一个图像之前从以前的图像中清除内存。
这是通过以下方式完成的:

  • 缓冲区设置为空。
  • 撤销对象 url 并将 url 设置null。

这种方法适用于各种操作系统,例如Windows、Linux 和 MacOS
但在 iOS 上它失败了

我将问题缩小到从 blob 创建和清理 url。为了简化调试,我删除了 zip 文件的使用,而是从外部 url 加载图像。

为了模仿从 zip 文件加载时的行为,我人为地从 url 获取 blob,通过 createObjectURL 创建对象 url,并通过 revokeObjectURL 清理对象 url

理想情况下,当我清理对象 url 时不应该有任何内存泄漏,但确实存在。
在有限数量的图像之后,加载失败。

问题的一个例子可以在这里看到: https ://jsfiddle.net/avnerm/vd8cwy9g/5/

将变量doDebugMemoryLeakOn_iOS_withRevoke设置为 true,激活命令

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

一段时间后,这会导致问题。
该程序应该加载约 3000 张图像,但在 iOS 设备上会更早停止(在我的 iPad Pro 上约 400 张图像之后)。

当在各种浏览器(例如Safari、Chrome、Firefox)中播放大约 1000 张图像后,在具有各种iOS版本(iOS 15.2、iOS 14.8.1 )的各种iOS设备(例如iPadiPhone8 )上会发生这种情况。 它也发生在使用WKWebView的原生 iOS 应用程序中。我怀疑WKWebView浏览器引擎 可能存在问题,这是所有这些浏览器共有的。

这是否表明WKWebView中存在错误?
如何解决或解决此问题?

相关问题也发布在Apple 开发论坛中 ,并提交了Webkit 错误

谢谢

4

0 回答 0