【问题标题】:UIImage takes up much more memory than its NSDataUIImage 比它的 NSData 占用更多的内存
【发布时间】:2015-05-16 17:43:27
【问题描述】:

我正在使用以下代码从NSData 加载UIImage

var image = UIImage(data: data!)

但是,有一个奇怪的行为。

一开始我用的是png数据,NSData每个大概80kB。

当我用数据设置UIImage 时,UIImage 每个占用了 128kb。

(用分配工具检查,ImageIO_PNG_Data的大小)

然后我改用 jpeg,NSData 变成了每个大约 7kb。

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

奇怪,为什么UIImage原来只有7kb,却要占用128kb?

我可以在不缩小UIImage 本身大小的情况下将内存使用量减少UIImage 吗??

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

任何帮助将不胜感激。

谢谢!!

【问题讨论】:

    标签: ios memory uiimageview uiimage


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!我认为 7kb 与 128kb 相比是如此之小,而 128kb 是如此整洁(= 2 ^ 7)所以这背后可能有一些东西......而且没有!我的愚蠢错误。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多