YYCache 原始碼分析(二)

發表於2016-06-11

本文分析YYMemoryCache實現原理:

295346-f3c5dedbdd158ec3

YYMemoryCache是記憶體快取,所以存取速度非常快,主要用到兩種資料結構的LRU淘汰演算法

1.LRU

Cache的容量是有限的,當Cache的空間都被佔滿後,如果再次發生快取失效,就必須選擇一個快取塊來替換掉.LRU法是依據各塊使用的情況, 總是選擇那個最長時間未被使用的塊替換。這種方法比較好地反映了程式區域性性規律

2.LRU主要採用兩種資料結構實現

  • 雙向連結串列(Doubly Linked List)
  • 雜湊表(Dictionary)

3.對一個Cache的操作無非三種:插入、替換、查詢

  • 插入:當Cache未滿時,新的資料項只需插到雙連結串列頭部即可
  • 替換:當Cache已滿時,將新的資料項插到雙連結串列頭部,並刪除雙連結串列的尾結點即可
  • 查詢:每次資料項被查詢到時,都將此資料項移動到連結串列頭部

4.分析圖(分析原始碼時可以對照該圖)

295346-92b5dc1f0b356781

5.YYMemoryCache.m裡的兩個分類

連結串列節點_YYLinkedMapNode

連結串列_YYLinkedMap
方法插入、替換、查詢方法實現:
存在表頭情況圖形分析(其他情況不用圖分析,自己想象吧,呵呵)
295346-1cb03d629ecbf2fa
295346-682e8396c2d9e092

YYMemoryCache.m實現分析(如果上面弄清楚,接下來就簡單多了),增刪改都是呼叫上面的方法,下面分析查詢與新增快取方法實現

接下來會分析YYDiskCache實現原理

文章同步到微信公眾號:hans_iOS 有疑問可以在公眾號裡直接發

相關文章