我正在使用以下代码从 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
时,它通常被压缩(使用 PNG
或 JPEG
)。当您使用 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/