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

李岡諭*_*李岡諭 5 require react-native

在 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} />
Run Code Online (Sandbox Code Playgroud)
  • 两种情况一样吗?
  • 第二种情况会将整个图像加载到内存中吗?
  • require何时发布源自的图像?

Art*_*tal 4

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

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

所以回答你的问题:

  1. 两种情况都是一样的
  2. 第二种情况并不特殊,不会将整个图像加载到内存中
  3. 当图像视图的本机表示被释放时,图像也会被释放,除非它被缓存在内存中(在某些情况下,本地图像被内部缓存),此时,操作系统需要关心的是在必要时释放该内存。

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