AF&SD
阿新 • • 發佈:2019-12-25
NSMaptable需要熟悉一下,很多地方都有,還有NSProxy(偽代理)
複製程式碼
SDWebImage
4.0->5.0(改動)
- 解碼類與manager的關係變更,由
組合
變為聚合
,進行了分類化
載入圖片流程
1.圖片是在網路還在是在本地
- 判斷當前有沒有任務正在進行
所有的operation都儲存在一個全域性的NSMaptable,
每次進行新的任務之前,都會對operation進行比對,
判斷之前是否有相同的任務
複製程式碼
- 初始化一些引數:總進度、manager
- loadImageWithURL(具體產生業務邏輯的方法)
- 載入完成之後顯示(當前的圖片是否需要處理,So會暴露部分自定義的api給外部)
1.兩個關鍵的operation
2.1 SDWebImageAvoidAudioSetImage,是否需要自動設定image
2.2 SDWebImageDelayPlaceholder,是否需要延遲設定placeholder
2.如果需要重新整理則[self setNeedsLayout]標記當前UI需要重新整理
複製程式碼
圖片快取
下載模組(記憶體和磁碟雙快取)
issue:
1.當圖片特別大得時候,進行快取,會使佔用記憶體暴增怎麼處理
2.shouleUseWeakMenoryCache是做什麼用的? ->是否需要SDWeb進行快取
3.為什麼Cache需要存兩遍?->因為NSCache是不可控的,不知道系統什麼時候會清空
複製程式碼
記憶體快取(SDMenoryCache:NSCache)的實現
- 為什麼要自己宣告SDMenoryCache不用系統的NSCache?
1.NSCache的生命週期,由系統管理,我們無法控制
複製程式碼
- 為什麼不用NSDcitionary而用NSMaptable來實現weakCache?
1.NSMaptable可以提供更多的記憶體語義
1.1 初始化的時候指定了key為strongMenory,value為weakMenory,value存在於全域性的weak表中,當我們的maptable被釋放的時候,weakValue會被釋放,strongKey會被保留下來做接下來的對比
2.如果使用NSDictionary,當外部快取進來的物件實現了NSCopy協議,會改變記憶體??????????(待研究)
3.監聽了(didReceiveMenoryWarning:),當記憶體不足時,清除快取
4.重寫了NSCache方法
4.1 - (void)set Object:(id)object forKey:(id)key cost:(NSIntager)g
首先,會呼叫Super在NSCache中進行快取(NSCache中會有一個數組或者連結串列之類的資料結構來儲存 ),然後才是SDCache的快取
!!!!!(Issued,第二個問題)
在這裡會根據SDCacheConfig中的shouleUseWeakMenoryCache來判斷
NO->儲存在NSCache的儲存結構中
YES->儲存在SDCache的NSMaptable中
複製程式碼
- 最後讀取記憶體的時候做了什麼操作?
1. -(id)objectForKey:(id)key
1.1 如果shouleUseWeakMenoryCache->NO && 讀取到了記憶體快取,直接返回
1.2 如果沒讀取到NSCache,才會讀取SDCache的NSMaptable中的快取,並且賦值給NSCache
複製程式碼
磁碟快取的實現
- 如何保證當前的檔名是唯一的?
1.找到的的image檔名進行md5轉換
複製程式碼
- 硬碟快取做了什麼
1.先查詢記憶體快取
2.miss則查詢硬碟快取
3.找到後,進行雙快取
複製程式碼
下載模組
downloader&&operation
1.downloader是管理類,對一些block和config進行管理
1.配置下載相關的引數
2.下載佇列的先後順序
3.最大任務數
4.HTTPS
5.cookie,header,使用者認證
6.下載任務優先順序的控制
1.怎麼控制優先順序的?
1.先進先出
2.後進先出
2.operation對下載的任務自定義生命週期
3.NSUrlSeesion(補充)
4.NSOperation-GCD (補充)
複製程式碼
AFNetworking
Https
1.https的流程
1.向服務端傳送SSL資訊
2.服務端返回客戶端SSL,版本資訊,以及服務端 !公鑰!(拿到公鑰)
3.客戶端校驗證書是否合法,合法繼續,否則警告
4.傳送自己支援的對稱加密方案給服務端
5.服務端選擇加密程度高的加密方式
6.服務端把自己選擇好的機密方式傳送給客戶端
7.客戶端收到加密方式後,產生隨機碼,作為對稱加密的祕鑰,使用公鑰加密後,發給服務端(使用協商的演算法加密隨機數,使用公鑰加密發給服務端)
8.私鑰解密,獲得加密祕鑰
9.對稱加密,進行通訊
2.根證書是做什麼的?
3.服務端401錯誤:需要使用者端資訊
複製程式碼
圖片快取
YYImage(非同步繪製) 待續
圖片格式是如何判斷的
載入動圖原理
1. 把圖片陣列轉換為二進位制
2. 計時器(CADisPlayLink)播放
複製程式碼
dataBuff->frameBuff->imageBuff
1.dataBuffer
2.frameBuffer:每一幀圖片
複製程式碼