当我在 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
的图像?
对 require
的调用并没有做太多 - 它 returns 一个由 RN 打包程序注册并分配给该图像的 ID。实际URL是图片组件需要渲染时从ID中解析出来的
在本机端,图像是从 URL 加载的,即使在这一点上,图像对象表示也只占用少量内存。只有当图像实际绘制为原生纹理时,它才会膨胀(解压缩)并完全加载到内存中(当然,除非图像已经缓存)。
所以回答你的问题:
- 两种情况相同
- 第二种情况并不特殊,不会将整个图像加载到内存中
- 图像将在释放图像视图的本机表示时释放,除非它缓存在内存中(在某些情况下,本地图像在内部缓存),此时它变成了OS'请注意在必要时释放此内存。
注意:上面的一些信息是从 iOS 的角度来看的,但它在 Android 上也应该足够接近。
在 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
的图像?
对 require
的调用并没有做太多 - 它 returns 一个由 RN 打包程序注册并分配给该图像的 ID。实际URL是图片组件需要渲染时从ID中解析出来的
在本机端,图像是从 URL 加载的,即使在这一点上,图像对象表示也只占用少量内存。只有当图像实际绘制为原生纹理时,它才会膨胀(解压缩)并完全加载到内存中(当然,除非图像已经缓存)。
所以回答你的问题:
- 两种情况相同
- 第二种情况并不特殊,不会将整个图像加载到内存中
- 图像将在释放图像视图的本机表示时释放,除非它缓存在内存中(在某些情况下,本地图像在内部缓存),此时它变成了OS'请注意在必要时释放此内存。
注意:上面的一些信息是从 iOS 的角度来看的,但它在 Android 上也应该足够接近。