iOS SDWebImage原始碼研究(二)

2021-07-11 02:37:49 字數 806 閱讀 7499

對於這個問題,sdwebimagemanager給出了乙個解決辦法(也就是說單獨使用sdimagecache是沒有的,需要自己修改原始碼):設定乙個cachekeyfilter,以nsurl作為輸入,輸出乙個nsstring作為快取key。

下面是sdwebimage github主頁的示例**:

;return

yes;}

2.今天去面試的時候被問到,關於cleandiskwithcompletionblock:中使用nsdirectoryenumerator的效能問題。使用nsdirectoryenumerator遍歷所有的快取檔案到底會不會造成效能問題,需不需要改進。

經過查詢stackoverflow,知道使用nsdirectoryenumerator遍歷所有的快取檔案,獲取檔案屬性,如我們需要的檔案大小資訊,是不會有效能問題的。nsdirectoryenumerator獲取檔案屬性是通過檢視檔案的inode資料,並不需要想象中的fileopen和fileclose。

inode中所包含的、unix使用者經常使用的一些重要資訊:

3.關於為何不在sdwebimage直接使用nscache,而需要自定義它的子類autopurgecache。

說明這個問題之前,先看看我們使用nscache的優點。

nscache的優點:

這就是為何我們選用類似於集合的nscache,而不用nsdictionary自己實現快取的考慮了。

但是,根據這個stackoverflow問題,nscache在ios7系統中不會響應記憶體告警,所以在sdwebimage中就子類化了nscache,自己監聽記憶體告警,並removeallobjects.

AbstractCollection原始碼分析

abstractcollection抽象類提供了collection的骨架實現,collection分析請看 這裡直接看它的 是如何實現的.public abstract iterator iterator 該方法沒有實現.public abstract int size 該方法沒有實現.publi...

ThreadPoolExecutor原始碼閱讀

執行緒池解決兩個問題 一是復用執行緒,減少建立銷毀執行緒帶來系統開銷 二是限定系統資源使用邊界,避免大量執行緒消耗盡系統記憶體 適用於互不依賴,執行時間短,不需要對執行緒控制操作的執行緒 新增任務時,1.若執行緒數量小於corepoolsize,則新增執行緒執行任務 2.若執行緒數量大於等於core...

OrangePi One Android 原始碼編譯

一 系統環境搭建參照 二 lichee原始碼編譯 1.檢視help build.sh h2.配置核心 cd linux 3.4 make arch arm menuconfig 進入配置頁面,上下移動列表,空格是選擇列表,左右移動選擇退出選項 3.首次編譯執行清除 在 lichee linux3.4...