我有一个网络应用程序,它从 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设备(例如iPad、iPhone8 )上会发生这种情况。
它也发生在使用WKWebView的原生 iOS 应用程序中。我怀疑WKWebView浏览器引擎
可能存在问题,这是所有这些浏览器共有的。
这是否表明WKWebView中存在错误?
如何解决或解决此问题?
相关问题也发布在Apple 开发论坛中 ,并提交了Webkit 错误
谢谢