1. 程式人生 > IOS開發 >AF&SD

AF&SD

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:每一幀圖片
複製程式碼

animate