AFNetworking和SDWebImage實現原理

AFNetworking
1.AFURLConnectionOperation可以說是AFN最基礎的類。繼承自NSOperation類,將網絡請求依附到一個operation上。從而讓我們能夠有效的控制並觀察一個網絡請求的創建、進行、取消、完成、暫停恢復、異常等問題及狀態。
2.AFHTTPRequestOperation HTTP或HTTPS協議請求的AFURLConnectionOperation的子類。它封裝的可接受狀態碼和內容的類型,判定一個請求結果是成功或失敗
3.AFHTTPRequestOperationManager 這個類是AFN類庫的核心類。它封裝完成了一種通用的模式,可以幫助我們輕鬆友好的完成請求的創建、響應的系列化,網絡狀態的監控以及安全策略以及每一個請求operation的管理(operation的相互依賴或狀態改變)
4.AFURLRequestSerialization 符合這個協議的對象用於處理請求,它將請求參數轉換爲 query string 或是 entity body 的形式,並設置必要的 header
5.AFURLResponseSerialization 遵循AFURLResponseSerialization協議的對象,用於驗證、序列化響應及相關數據,轉換爲有用的形式,比如 JSON 對象、圖像、甚至基於mantle的模型對象
6.AFNetworkReachabilityManager 網絡的連通狀態監控以及網絡的類型。實際是將蘋果官方提供的Reachability的類名和通知名更換了一下,防止和系統提供的類的通知名以及類名的衝突

SDWebImage底層實現原理:
其實是有沙盒緩存機制,主要由三塊組成
1.內存圖片緩存2.內存操作緩存3.磁盤沙盒緩存
1.UIImageView+WebCache: setImageWithURL:placeholderImage:options: 先顯示 placeholderImage ,同時由SDWebImageManager 根據 URL 來在本地查找圖片
2.SDWebImageManager: downloadWithURL:delegate:options:userInfo: SDWebImageManager是將UIImageView+WebCache同SDImageCache鏈接起來的類, SDImageCache: queryDiskCacheForKey:delegate:userInfo:用來從緩存根據CacheKey查找圖片是否已經在緩存中
3.如果內存中已經有圖片緩存, SDWebImageManager會回調SDImageCacheDelegate : imageCache:didFindImage:forKey:userInfo:
4.如果內存中沒有圖片緩存,那麼生成 NSInvocationOperation 添加到隊列,從硬盤查找圖片是否已被下載緩存。
5.如果上一操作從硬盤讀取到了圖片,將圖片添加到內存緩存中(如果空閒內存過小,會先清空內存緩存)。SDImageCacheDelegate 回調 imageCache:didFindImage:forKey:userInfo:。進而回調展示圖片
6.如果從硬盤緩存目錄讀取不到圖片,說明所有緩存都不存在該圖片,需要下載圖片,回調 imageCache:didNotFindImageForKey:userInfo:
7.圖片下載由 NSURLConnection 來做,實現相關 delegate 來判斷圖片下載中、下載完成和下載失敗

發佈了26 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章