關(guān)于UIImage的優(yōu)化

在加載圖片中,我們常常用的最多的就是 UIImage(named:"image"),這個(gè)方法的優(yōu)點(diǎn)就是可以把圖片緩存在內(nèi)存當(dāng)中,讀取的時(shí)候非常的快,但是有個(gè)缺點(diǎn)就是會(huì)重復(fù)的創(chuàng)建圖片緩存,如下圖:

UIImage.png

再看看用UIImage加載5萬個(gè)時(shí)內(nèi)存的消耗

UIImage.gif

用UIImage消耗了23.4的memory
接下來使用自定義的SwiftImage加載5萬個(gè)圖片內(nèi)存的消耗

SwiftImage.png

SwiftImage.gif

可以看到自定義的SwiftImage消耗的內(nèi)存為13.1的memory


接下來看看這個(gè)SwiftImage類能否讓UIImageView顯示圖片

Paste_Image.png

上面兩個(gè)是系統(tǒng)的,下面兩個(gè)是自定義的

Paste_Image.png

結(jié)果表明,自定義的SwiftImage是完全有效的


實(shí)現(xiàn)思路

創(chuàng)建一個(gè)全局的字典[String : UIImage],key是圖片的名字,value是圖片的對(duì)象,在加載圖片的時(shí)侯,先判斷這個(gè)圖片的名字是否和字典的key一樣,如果是,說明這個(gè)圖片已存在內(nèi)存當(dāng)中,這時(shí)候可以用imageView.image = dic["image.jpg"]取出來,如果不是,就

dic["image.jpg"] = UIImage(named:"image.jpg")
imageView.image = dic["image.jpg"]

當(dāng)然上面只是實(shí)現(xiàn)的具體思路,接下來就上我自己的封裝的類

swift
import UIKit

// 自己封裝的單例
class MYImage {
private var imageDic: [String: UIImage?] = Dictionary()

class var shared: MYImage {
struct Inner {
static let instance: MYImage = MYImage()
}
return Inner.instance
}
func imageName(name name: String) -> UIImage? {
if imageDic.keys.count == 0 {
imageDic[name] = UIImage(named: name)
return imageDic[name]!
}
for key in imageDic.keys {
if key == name {
return imageDic[name]!
} else {
imageDic[name] = UIImage(named: name)
return imageDic[name]!
}
}
return nil
}
}

//將單例封裝在這個(gè)方法中
func SwiftImage(name name: String) -> UIImage? {
//調(diào)用單例
return MYImage.shared.imageName(name: "image.jpg")
}

#最后
創(chuàng)建單例和字典也需要消耗內(nèi)存的,所以,只有創(chuàng)建大量重復(fù)的圖片的時(shí)侯用這個(gè)比較好,其余的都用系統(tǒng)的。
我將測(cè)試的demo上傳到了<a >github</a>上
歡迎各位老司機(jī)多多點(diǎn)贊^_^
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,765評(píng)論 25 709
  • 在第13章“高效繪圖”中,我們研究了和Core Graphics繪圖相關(guān)的性能問題,以及如何修復(fù)。和繪圖性能相關(guān)緊...
    雪_晟閱讀 709評(píng)論 0 0
  • 烏孜依帕大娘是哈薩克族人,住在都拉塔邊防哨所旁。都拉塔邊防哨所的官兵們都親切地稱她烏大娘。 每天,太陽還沒探出頭...
    雪鷹飛閱讀 729評(píng)論 2 2
  • 不知道為什么,對(duì)于電影并不是非常熱衷的自己會(huì)對(duì)偶然過眼的《一代宗師》念念不忘。在大年夜的前幾天把這部片子細(xì)細(xì)品味,...
    心理學(xué)工作者閱讀 11,251評(píng)論 2 13
  • 我們或在逐夢(mèng)或在趕路,我們喜歡和人交談,交談那夢(mèng)那路。我們的夢(mèng)破碎我們的路在撕裂,我們喜歡與人交談,談那碎夢(mèng)談那裂...
    獅子777閱讀 262評(píng)論 0 0

友情鏈接更多精彩內(nèi)容