2016-10-01 48 views
2

我有一个大小为200KB的图像的UIImage实例,然后我创建了UIImageView的5个实例引用相同的这个UIImage。多次显示相同图像时如何优化内存?

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

回答

2

一对夫妇的想法:

  1. UIImage是引用类型,所以当你引用同一个图像五次,你一般会在内存中有一个图像对象。这取决于你如何做到这一点。例如,如果每次使用UIImage(data:)或类似的东西,每次都可以实例化一个新对象,但是如果仅实例化一个UIImage,然后在五次后继续使用,则不会看到重复的内存消耗发生。

作为题外话:

  • 你说图像具有尺寸200KB的。这是原始资产的规模,还是你知道这是运行时需要多少内存?

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

    请注意,此内存消耗对应于所讨论图像的维度,而不是您添加它的图像视图的维度。如果您担心内存使用情况,并且图像尺寸超过图像视图的大小(乘以设备比例),则可能需要考虑调整图像大小。

  • 未来,您可以使用仪器凭经验回答这些问题。例如,在下面的时间线中,在绿色路标处,我加载了一个UIImage,其中676kb资源的影响程度适中,我将图像视图image设置为在紫色路标处使用此资产,因为它未压缩此2560 x 1440 px图像,并且我在橙色路标上加载了五个图像视图,并且可以忽略更多的内存影响。

    enter image description here

  • 相关问题