2016-10-01 36 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

  • 相關問題