UIImage占用的内存比NSData多得多

时间:2015-03-14 05:37:31

标签: ios memory uiimageview uiimage

我正在使用以下代码

UIImage加载NSData
var image = UIImage(data: data!)

然而,有一种奇怪的行为。

首先,我使用了png数据,而NSData各占约80kB。

当我使用数据设置UIImage时,UIImage每次占用128kb。

(选中分配工具,ImageIO_PNG_Data的大小)

然后我改为使用jpeg,NSData每个约7kb。

但是,UIImage每个都是128kb,所以在显示图像时我没有内存优势! (NSData减少到80kb - > 7kb,而UIImage占用相同的内存量

奇怪的是,当原始数据仅为7kb时,为什么UIImage应该占用128kb?

我可以减少UIImage的内存使用量而不缩小UIImage本身的大小吗?

请注意,我不处理高分辨率图像,因此无法调整图像大小(NSData已经是7kb !!)

任何帮助将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:3)

当您访问NSData时,通常会对其进行压缩(使用PNGJPEG)。当您使用UIImage时,有一个未压缩的像素缓冲区,通常每像素4个字节(分别为红色,绿色,蓝色和alpha的一个字节)。还有其他格式,但它说明了JPEG或PNG表示可以压缩的基本思想,当您开始使用图像时,它是未压缩的。

在您的结论中,您说调整大小不是一个选项,NSData已经是7kb。我建议,如果图像的分辨率大于分辨率(bounds / frame乘以设备规模的点数),则应考虑的大小调整您正在使用它的UIImageView。是否调整大小的问题不是NSData大小的函数,而是视图的分辨率。因此,如果您在表视图中的小拇指视图中使用了1000x1000像素的图像,那么无论JPEG表示有多小,您都应该大小调整图像大小。

答案 1 :(得分:1)

这很正常。当图像存储为NSData时,它会被压缩(通常使用PNG或JPG压缩)。当它是UIImage时,图像会被解压缩,这样就可以在屏幕上快速绘制。