面試題:簡單的描述一下 SDWebImage的緩存策略冲呢?
首先,SDWebImage
的圖片緩存采用的是 Memory
(內(nèi)存) 和 Disk
(硬盤) 雙重 Cache
機制燕鸽,SDImageCache
中有一個叫做 memCache
的屬性兄世,它是一個 NSCache
對象,用于實現(xiàn)我們對圖片的 Memory Cache
啊研,其實就是接受系統(tǒng)的內(nèi)存警告通知御滩,然后清除掉自身的圖片緩存。
Disk Cache
党远,也就是文件緩存削解,SDWebImage
會將圖片存放到 NSCachesDirectory
目錄中,然后為每一個緩存文件生成一個 md5
文件名, 存放到文件中沟娱。
整體機制如下:
Memory(內(nèi)存)中查找:
SDImageCache
類的queryDiskCacheForKey
方法氛驮,查詢圖片緩存,queryDiskCacheForKey
方法內(nèi)部济似, 先會查詢Memory Cache
矫废,如果查找到就直接返回,反之進入下面的硬盤查找砰蠢。Disk(硬盤) 中查找:如果
Memory Cache
查找不到蓖扑, 就會查詢Disk Cache
,查詢Disk Cache
的時候有一個小插曲台舱,就是如果Disk Cache
查詢成功律杠,還會把得到的圖片再次設(shè)置到Memory Cache
中。 這樣做可以最大化那些高頻率展現(xiàn)圖片的效率竞惋。如果找不到就進入下面的網(wǎng)絡(luò)下載柜去。網(wǎng)路下載:請求網(wǎng)絡(luò)使用的是
imageDownloader
屬性,這個示例專門負責下載圖片數(shù)據(jù)拆宛。 如果下載失敗嗓奢, 會把失敗的圖片地址寫入failedURLs
集合,為什么要有這個failedURLs
呢胰挑, 因為SDWebImage
默認會有一個對上次加載失敗的圖片拒絕再次加載的機制蔓罚。 也就是說椿肩,一張圖片在本次會話加載失敗了瞻颂,如果再次加載就會直接拒絕豺谈,SDWebImage
這樣做可能是為了提高性能。如果下載圖片成功了贡这,接下來就會使用[self.imageCache storeImage]
方法將它寫入緩存 茬末,同時也會寫入硬盤,并且調(diào)用completedBlock
告訴前端顯示圖片盖矫。Disk(硬盤)緩存清理策略:
SDWebImage
會在每次APP
結(jié)束的時候執(zhí)行清理任務(wù)丽惭。 清理緩存的規(guī)則分兩步進行。 第一步先清除掉過期的緩存文件辈双。 如果清除掉過期的緩存之后责掏,空間還不夠。 那么就繼續(xù)按文件時間從早到晚排序湃望,先清除最早的緩存文件换衬,直到剩余空間達到要求。
更多:iOS面試題 答案合集
更多:《BAT面試答案文集.PDF》证芭,獲取可加iOS技術(shù)交流圈:937194184瞳浦。