1缰趋、SDImageCache是怎么做數據管理的?
SDImageCache分兩個部分捧杉,一個是內存層面的,一個是硬盤層面的秘血。
內存層面的相當是個緩存器味抖,以Key-Value的形式存儲圖片。當內存不夠的時候會清除所有緩存圖片灰粮。
用搜索文件系統(tǒng)的方式做管理仔涩,文件替換方式是以時間為單位,剔除時間大于一周的圖片文件粘舟。
當SDWebImageManager向SDImageCache要資源時熔脂,先搜索內存層面的數據,如果有直接返回柑肴,沒有的話去訪問磁盤霞揉,將圖片從磁盤讀取出來,然后做Decoder晰骑,將圖片對象放到內存層面做備份,再返回調用層隶症。
2蚂会、為啥必須做Decoder?
通過這個博客:http://www.cocoanetics.com/2011/10/avoiding-image-decompression-sickness/
現(xiàn)在明白了胁住,由于UIImage的imageWithData函數是每次畫圖的時候才將Data解壓成ARGB的圖像彪见,
所以在每次畫圖的時候儡司,會有一個解壓操作捕犬,這樣效率很低碉碉,但是只有瞬時的內存需求垢粮。
為了提高效率通過SDWebImageDecoder將包裝在Data下的資源解壓靠粪,然后畫在另外一張圖片上占键,這樣這張新圖片就不再需要重復解壓了捞慌。
這種做法是典型的空間換時間的做法啸澡。