UIImage 内存问题

UIImage Memory Problems

在我的应用程序中,我从 API 图像的 url 返回,我想在应用程序中显示这些图像。这一切都很好,只是我开始注意到,当我收到并加载非常高分辨率的图像时,我的应用程序内存使用量激增 200+mb,经常导致它崩溃,这是不可接受的。

在一个特定示例中,我得到了一张尺寸为 8100*5400 像素的图像。应用程序加载此图片时崩溃了。

虽然我最初认为问题是我造成的内存泄漏,但经过一些研究,这似乎是一个与图像大小有关的不可避免的问题——因为图像是 43,740,000 像素,每个像素使用 4字节,图像的内存使用量最少为 174,960,000 字节,即 174.96 兆字节。

问题是我无法控制 api 发送的图像的大小 - 它们可能是任何分辨率,甚至可能更大。显然 UIImage 不适合我的目的。

有没有其他方法可以在不导致应用程序崩溃内存使用的情况下显示具有潜在大分辨率的图像?

不要将图像作为数据下载到内存中,这会使您的应用程序崩溃,而是将其作为数据下载到磁盘中,这样不会。

然后您可以使用图像 I/O 框架来加载不会占用太多内存的较小版本的图像。

(请注意,您永远不应尝试显示大于您需要的实际显示尺寸的图像,因为这会浪费大量内存。因此,即使您忍不住要下载大图像,您也可以至少加载并显示一个比您实际需要的小得多的版本。)