UIImage内存问题

时间:2015-12-18 20:48:42

标签: objective-c cocoa-touch memory memory-management uiimage

在我的应用程序中,我从API返回图像的网址,我想在应用程序中显示。这一切都很好,除了我开始注意到,当我给出并加载非常高分辨率的图像时,我的应用程序内存使用率达到200 + mb,经常导致崩溃,这是不可接受的。

在一个特定示例中,我获得了尺寸为8100 * 5400像素的图像。当应用加载此图片时,它就会崩溃。

虽然我第一次认为问题是我创建的内存泄漏,但经过一些研究后,它似乎是一个与图像大小相关的不可避免的问题 - 因为图像是43,440,000像素,每个像素使用4个字节,图像的内存使用量至少为174,960,000字节,即174.96兆字节。

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

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

1 个答案:

答案 0 :(得分:2)

不是将图像作为数据下载到内存中,而是将应用程序崩溃,而是将其作为数据下载到磁盘,而不是。

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

(请注意,您不应该尝试显示大于您所需的实际显示尺寸的图像,因为这会大量浪费内存。因此,即使您无法帮助下载大图像,也至少可以加载并显示您需要的实际小得多的版本。)