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

时间:2017-03-07 10:51:42

标签: react-native require

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派生的图像?

1 个答案:

答案 0 :(得分:1)

require的调用没有太大作用 - 它返回由RN打包器注册并分配给该图像的ID。当图像组件需要渲染时,实际的URL将从ID中解析出来。

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

所以回答你的问题:

  1. 两种情况都是一样的
  2. 第二种情况并不特殊,不会将整个图像加载到内存中
  3. 当图像视图的本机表示被释放时,图像将被释放,除非它被缓存在内存中(在某些情况下,本地图像在内部缓存),此时它成为操作系统的关注,当它是必要的。
  4. 注意:上面的一些信息来自iOS视角,但它在Android上也应该足够接近。