相关源码
js: Blob.js 、BlobManager.js、NativeBlobModule.js
android: BlobModule.java
iOS: RCTBlobManager.mm
道理很简单,fetch 、readFile 等接口获取到的数据是由原生端将数据缓存在内存中,类似于 HashMap, 使用 kv 接口,其中 key 是一个 uuid,js 的 blob 对象有一个 blobId 的属性存储这个 uuid,后续读取就是利用该 uuid 通过 js bridge 从原生端拉回数据
也可以创建 blob 对象,创建时,js 把创建数据传给原生端,由原生端缓存。 后续操作就一样了。
通过 blob 源码 可以看到一个 close 标准方法,但现在所有浏览器都没去实现。所以在使用 blob 对象时,在确定用完了之后,最好调用一下 close() 方法来释放内存。 至于 rn 会不会在后续释放,没继续深究,就不晓得了。
网友评论