当我在 React Native 中使用 `require` 加载图像时,它是否真的将图像加载到内存中?什么时候发布?

When I use `require` to load an image in React Native, does it really load the image into memory? When will it release?

在 React Native 中 require 一个 Image 组件的图像有两种方法。

// 1. inline `require` (triggered when using)
const IconView = () => 
  <Image source={require('./img/favicon.png')} />

// 2. define a variable for cache (triggered when loading)
const imageSource = require('./img/favicon.png')
const IconView = () => 
  <Image source={imageSource} />

require 的调用并没有做太多 - 它 returns 一个由 RN 打包程序注册并分配给该图像的 ID。实际URL是图片组件需要渲染时从ID中解析出来的

在本机端,图像是从 URL 加载的,即使在这一点上,图像对象表示也只占用少量内存。只有当图像实际绘制为原生纹理时,它才会膨胀(解压缩)并完全加载到内存中(当然,除非图像已经缓存)。

所以回答你的问题:

  1. 两种情况相同
  2. 第二种情况并不特殊,不会将整个图像加载到内存中
  3. 图像将在释放图像视图的本机表示时释放,除非它缓存在内存中(在某些情况下,本地图像在内部缓存),此时它变成了OS'请注意在必要时释放此内存。

注意:上面的一些信息是从 iOS 的角度来看的,但它在 Android 上也应该足够接近。