为什么 xcode 中的图像在运行时占用的空间比实际大小多 50 倍 space

Why does image in xcode takes up 50x more space during runtime than the actual size

我正在编写一个 iphone 应用程序并使用了几个大图像。其中一张图片是 .png 文件,大小 < 1mb。然而,在运行时,调试器说它占用了 50mb 的 space。我使用 UIImageView 对象通过 Interface Builder 放置图像。

问题是,为什么会占用这么多内存,有没有办法不用占用那么多就可以使用图片space?

Marc B 的评论是对的。

你搞反了。 “Xcode”(在 运行ning 程序中)占用的内存不会比“实际大小”多 50 倍。

磁盘上的文件经过压缩,space比图像在内存中占用的空间少很多。 实际大小是内存中的大小,磁盘中的大小是压缩格式保存,但不能绘制到屏幕上。

要在屏幕上渲染图像,每个像素需要使用 3 或 4 个字节(红色、绿色、蓝色,有时还需要一个 alpha 通道)且不进行压缩。因此,如果您有一张 1000x1000 像素的图像,将其加载到内存中需要 400 万字节的内存。如果将其保存到磁盘,不同的文件格式会使用不同级别的压缩来保存该数据。一种简单的方案是 RLE,运行-length-encoding。在该方案中,相同颜色的连续字节用特殊代码写入(例如“在此处保存 500 个纯蓝色像素”,尽管除非图像是使用绘图程序生成的,否则很少有大面积完全相同的颜色。 RLE 对于照片或扫描几乎毫无价值。)

其他压缩方案可实现更高级别的压缩。一些压缩方案是“有损的”(这意味着您在压缩然后解压缩图像后得到的图像与起始图像不完全相同。)JPEG 压缩是有损方案的一个例子。在 JPEG 压缩中,您可以调整压缩级别。更高级别的压缩产生更小的文件,但生成的图像看起来不那么好,因为丢失的数据量越来越大。

无论采用何种压缩方案,图形硬件都需要内存中的每像素 4 个字节才能进行绘制。

P.S。我的一个小毛病:Xcode 是一个开发环境(编辑器、编译器、调试器、链接器等)。您的图像不是“在 Xcode 中绘制的”。它由您碰巧使用 Xcode.

编译 的程序在 iOS 或 Mac OS 中呈现

(所以当人们谈论为什么“Xcode” 运行 以某种方式编写他们的代码时,这会让有经验的开发人员感到畏缩,并且让你听起来很无知。我不打算成为意思是 - 只是让你知道。)