iOS開發(fā) 如何做一個(gè)圖片緩存框架

原文請參考:http://m.itdecent.cn/p/9d114a82f77b


參照SDWebImage做,主要考慮以下幾點(diǎn)

  • Manager
  • Cache :內(nèi)存緩存、磁盤緩存
  • downloader網(wǎng)絡(luò)下載
  • 封裝視圖Category
  • 圖片解碼、解壓縮

在圖片的存儲是以圖片的單向 hash 值為 Key

1.Manager

Manager用于管理downloaderCache,設(shè)置options參數(shù),讓用戶設(shè)置緩存策略

  • 下載失敗重試
  • 只用磁盤數(shù)據(jù)
  • 不用緩存數(shù)據(jù)等等

2.內(nèi)存緩存

內(nèi)存中緩存的數(shù)據(jù),需要考慮存儲的size,針對不同尺寸的圖片,給出不同的方案

  • 10K 以下的50個(gè)
  • 100Kb 以下的20個(gè)
  • 100kb 以上的10個(gè)

內(nèi)存的淘汰策略 采取 LRU(最近最少使用算法)

觸發(fā)淘汰策略的時(shí)機(jī):

  • 定期檢查(不建議,消耗性能)
  • 提高觸發(fā)頻率:1.前后臺切換的時(shí)候 2.每次讀寫的時(shí)候

3.磁盤緩存

磁盤緩存需要考慮的問題如下

  • 存儲方式
  • 大小限制
  • 移除策略(可以設(shè)置為7天)

4.網(wǎng)絡(luò)下載

  • 圖片請求的最大并發(fā)量
  • 請求超時(shí)策略
  • 請求優(yōu)先級

5.圖片解碼解壓縮

針對jpg、png、gif等不同的圖片格式進(jìn)行解碼

解碼調(diào)用時(shí)機(jī)

  • 子線程圖片下載完成時(shí)
  • 子線程剛從磁盤讀取完成時(shí)

避免在主線程中解壓縮、解碼,避免卡頓

6.封裝視圖Category

基于Manager封裝響應(yīng)控件的Category

- (void)sd_setImageWithURL:(nullable NSURL *)url
          placeholderImage:(nullable UIImage *)placeholder
                   options:(SDWebImageOptions)options
                  progress:(nullable SDImageLoaderProgressBlock)progressBlock
                 completed:(nullable SDExternalCompletionBlock)completedBlock;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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