一個非同步載入圖片的公用類: EGOImageLoading
阿新 • • 發佈:2019-02-18
再用UIImage
initWithData生成圖片物件。對於剛開始接觸iOS開發的人來說,我還是推薦用這種方式的。但是對於已經有一定iOS
開發經驗的人來說,我推薦你們用比較成熟的第三方公用類。
為什麼這麼說呢,
1) 首先圖片非同步載入屬於一個公共的問題空間,這部分的程式碼,對於所有需要載入網路圖片的專案,邏輯都是一樣的,也就是我們應
該把這部分程式碼做成可重用的,或者直接使用第三方的圖片載入公用類,從而把時間放在解決專案主要業務邏輯程式碼上。
2) 另外,圖片非同步載入看似簡單,但是如果是想自己來做一個可重用的圖片載入公用類,需要考慮的問題還是非常多的,我們來列舉
一下到底有哪些問題需要考慮進去:
快取 -- 圖片相對來說是容量比較大的檔案,如果每次載入都從網路請求,一來影響使用者的瀏覽體驗,每次都需要等待時間,二來
消耗網路頻寬,還會給伺服器增加響應壓力。所以一般做圖片非同步載入都需要把圖片快取在本地,如果自己來做需要考慮
檔案的存取程式碼,另外還需要考慮圖片快取的時效問題,因為網路圖片不一定是永久不變的,伺服器上的圖片可能會在一
段時間後被更改,所以需要可以靈活設定一個快取的失效時間,重新請求並快取。
非同步執行緒處理 --- 執行緒永遠都是一個複雜的問題,在理想狀態下,非同步載入執行緒很簡單,只需要在完成或者失敗時回撥就可以了,
但是一個周全的非同步載入考慮的問題會更多。比如如果發起非同步執行緒的物件被release了,需要通知並停下所有的
非同步載入執行緒請求,否則線上程回撥時就有可能發生不可預料的錯誤。另外像執行緒的記憶體釋放等等問題我就不再
舉例了。
週期是一天的時間 如果沒有手動清除的話 就自動清除了!!在EGOCache類中有清除快取的方法的!
EGOImageLoading是我在專案中用的比較多的一個第三方圖片非同步載入類,你們可以在git上找到並下載它,連結如下。另外提一下,
廣為人知的下拉重新整理EGORefreshTableHeaderView也是就是這個人寫的。
https://github.com/enormego/EGOImageLoading
(下載後執行demo程式XCode會提示找不到EGOCache.h標頭檔案,可以在這個地方下載https://github.com/enormego/EGOCache)
開發經驗的人來說,我推薦你們用比較成熟的第三方公用類。
為什麼這麼說呢,
1) 首先圖片非同步載入屬於一個公共的問題空間,這部分的程式碼,對於所有需要載入網路圖片的專案,邏輯都是一樣的,也就是我們應
該把這部分程式碼做成可重用的,或者直接使用第三方的圖片載入公用類,從而把時間放在解決專案主要業務邏輯程式碼上。
2) 另外,圖片非同步載入看似簡單,但是如果是想自己來做一個可重用的圖片載入公用類,需要考慮的問題還是非常多的,我們來列舉
一下到底有哪些問題需要考慮進去:
快取 -- 圖片相對來說是容量比較大的檔案,如果每次載入都從網路請求,一來影響使用者的瀏覽體驗,每次都需要等待時間,二來
消耗網路頻寬,還會給伺服器增加響應壓力。所以一般做圖片非同步載入都需要把圖片快取在本地,如果自己來做需要考慮
檔案的存取程式碼,另外還需要考慮圖片快取的時效問題,因為網路圖片不一定是永久不變的,伺服器上的圖片可能會在一
段時間後被更改,所以需要可以靈活設定一個快取的失效時間,重新請求並快取。
非同步執行緒處理 --- 執行緒永遠都是一個複雜的問題,在理想狀態下,非同步載入執行緒很簡單,只需要在完成或者失敗時回撥就可以了,
但是一個周全的非同步載入考慮的問題會更多。比如如果發起非同步執行緒的物件被release了,需要通知並停下所有的
非同步載入執行緒請求,否則線上程回撥時就有可能發生不可預料的錯誤。另外像執行緒的記憶體釋放等等問題我就不再
舉例了。
週期是一天的時間 如果沒有手動清除的話 就自動清除了!!在EGOCache類中有清除快取的方法的!
EGOImageLoading是我在專案中用的比較多的一個第三方圖片非同步載入類,你們可以在git上找到並下載它,連結如下。另外提一下,
廣為人知的下拉重新整理EGORefreshTableHeaderView也是就是這個人寫的。
https://github.com/enormego/EGOImageLoading
(下載後執行demo程式XCode會提示找不到EGOCache.h標頭檔案,可以在這個地方下載https://github.com/enormego/EGOCache)