多次显示相同图像时如何优化内存?

时间:2016-10-01 07:40:39

标签: ios performance uiimage

我有一个UIImage实例,大小为200KB的图像,然后我创建了5个UIImageView实例,引用相同的UIImage。

我想知道在这种情况下分配了多少内存 - 只有200KB(一个UIImage实例)或1MB(对于5个克隆的UIImage实例)?在浪费内存的情况下,是否有解决它的有效方法?

1 个答案:

答案 0 :(得分:2)

有几点想法:

  1. UIImage是一种引用类型,因此当您引用同一图像五次时,通常在内存中会有一个图像对象。这取决于你如何做到这一点。例如,如果每次使用UIImage(data:)或类似的东西,则每次都可以实例化一个新对象,但如果只实例化一个UIImage,则继续使用if五次,然后你不会看到重复的内存消耗。
  2. 暂且不说:

    1. 您说图片的大小为200kb。这是原始资产的大小,或者您是否知道这是在运行时需要多少内存?

      我问的原因是JPG和PNG文件通常是压缩的,但是当你在图像视图中使用它时,它将被解压缩。图像占用的内存量与原始资源的文件大小无关,而是与图像的尺寸(以像素为单位)相对应。因此,一个676 kb,即2560 x 1440像素的随机PNG实​​际上可能需要14mb的内存(每个像素四个字节)。

      请注意,此内存消耗对应于相关图像的尺寸,而不是您添加图像视图的尺寸。如果您担心内存使用情况以及图片尺寸超出图片视图的尺寸(设备比例的倍数),那么您可能需要考虑调整图片大小。

    2. 将来,您可以使用乐器凭经验回答这些问题。例如,在下面的时间轴中,在绿色路标中,我加载了UIImage,其中676kb资产具有适度的内存影响,我设置了图像视图image以在紫色路标中使用此资产因为它解压缩了这个2560 x 1440 px图像而造成了重大内存影响,并且我在橙色路标中加载了五个具有相同图像的图像视图,而对内存的影响可以忽略不计。

      enter image description here