ios - UIImage 比它的 NSData 占用更多的内存

标签 ios memory uiimageview uiimage

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

var image = UIImage(data: data!)

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

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

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

(用Allocation instrument检查,ImageIO_PNG_Data的大小)

然后我改为使用 jpeg,NSData 变成了每个 7kb 左右。

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

很奇怪,为什么UIImage要占用128kb,而原始数据只有7kb?

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

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

我们将不胜感激。

谢谢!!

最佳答案

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

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

关于ios - UIImage 比它的 NSData 占用更多的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29045843/

相关文章:

.net - .NET 内存管理在托管代码中是否比在 native 代码中更快?

Java 内存泄漏 - 在程序终止时清除?

python - 我的列表使用了多少内存?

swift - 如何在 Swift 中裁剪 UIImage 以 mask

ios - 如何访问添加到 Storyboard 的 UIImageView

ios - 单击应用程序的通知横幅后打开 iMessage Composer ?

ios - admob Interstitial 自动关闭

iOS开发: problematic framework search path

ios - 我可以使用一个自定义创建的 UIViewController 来填充父 UITableViewController 的单元格文本值吗?

ios - UIImageview 方面填充和 clipsToBounds ,如何使 subview 不被剪裁?