UIImage 比它的 NSData 占用更多的内存
UIImage takes up much more memory than its NSData
我正在使用以下代码从 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
仍然占用相同数量的内存)
奇怪,为什么原始数据只有7kb,UIImage
却要占用128kb?
我可以在不缩小 UIImage
本身大小的情况下将此内存使用减少 UIImage
吗??
请注意,我处理的不是高分辨率图像,因此无法调整图像大小(NSData
已经 7kb!!)
任何帮助将不胜感激。
谢谢!!
这是正常的。当图像存储为 NSData
时,它被压缩(通常使用 PNG 或 JPG 压缩)。当它是 UIImage
时,图像被解压缩,这使得它可以在屏幕上快速绘制。
当您访问 NSData
时,它通常被压缩(使用 PNG
或 JPEG
)。当您使用 UIImage
时,有一个未压缩的像素缓冲区,通常每个像素 4 个字节(一个字节分别用于红色、绿色、蓝色和 alpha)。还有其他格式,但它说明了基本思想,即可以压缩 JPEG 或 PNG 表示形式,当您开始使用图像时,它是未压缩的。
在您的结论中,您说调整大小不是一个选项并且 NSData
已经是 7kb。如果图像的分辨率大于分辨率(bounds
/frame
的点乘以图像的比例,我建议考虑调整大小 should device) 在您使用它的 UIImageView
中。是否调整大小的问题不是 NSData
大小的函数,而是视图的分辨率。因此,如果您有一张 1000x1000 像素的图像,您在 table 视图的小拇指视图中使用它,那么无论 JPEG 表示有多小,您都应该调整图像的大小。
我正在使用以下代码从 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
仍然占用相同数量的内存)
奇怪,为什么原始数据只有7kb,UIImage
却要占用128kb?
我可以在不缩小 UIImage
本身大小的情况下将此内存使用减少 UIImage
吗??
请注意,我处理的不是高分辨率图像,因此无法调整图像大小(NSData
已经 7kb!!)
任何帮助将不胜感激。
谢谢!!
这是正常的。当图像存储为 NSData
时,它被压缩(通常使用 PNG 或 JPG 压缩)。当它是 UIImage
时,图像被解压缩,这使得它可以在屏幕上快速绘制。
当您访问 NSData
时,它通常被压缩(使用 PNG
或 JPEG
)。当您使用 UIImage
时,有一个未压缩的像素缓冲区,通常每个像素 4 个字节(一个字节分别用于红色、绿色、蓝色和 alpha)。还有其他格式,但它说明了基本思想,即可以压缩 JPEG 或 PNG 表示形式,当您开始使用图像时,它是未压缩的。
在您的结论中,您说调整大小不是一个选项并且 NSData
已经是 7kb。如果图像的分辨率大于分辨率(bounds
/frame
的点乘以图像的比例,我建议考虑调整大小 should device) 在您使用它的 UIImageView
中。是否调整大小的问题不是 NSData
大小的函数,而是视图的分辨率。因此,如果您有一张 1000x1000 像素的图像,您在 table 视图的小拇指视图中使用它,那么无论 JPEG 表示有多小,您都应该调整图像的大小。