AFNetworking
-
整體架構
image.png -
主要關系圖:
image.png
AFURLSessionManger
- 創建和管理NSURLSession,NSURLSessionTask
- 實現NSURLSessionDelegate協議
- 引入AFSecurityPolicy保證數據請求安全
- 引入AFNetworkingReachabilityManger網絡監控
AFNetworking的請求流程
1.請求GET方法(4個參數,url,參數,成功,失敗的回調)
2.請求GET方法(5個參數,url,參數,進度,成功,失敗的回調)
3.此方法生成一個NSURLSessionDataTask方法,并作為一個返回參數
4.通過requestSerializer請求序列化(請求方式,參數,url序列化),生成一個request(對HTTPHeader的封裝)
5.request創建好后調用dataTaskRequest方法:通過NSURLSession類調用dataTaskWithRequest系統方法。
6.添加dataTask代理方法:addDelegateForDataTask方法
7.setDelegate:ForTask:(傳入delegate,task),通過key/Value方式來綁定delegate(key為taskIdentifier)。
SDWebImage
架構簡圖
image.png
加載圖片的流程
image.png
ReactiveCocoa
- 函數式響應編程第三方庫
- 訂閱一個信號
- ReactiveCocoa中的核心類:RACSignal,繼承于RACSteam。
- RACSignal子類:RACDynamicSignal,RACReturnSignal,RACEmptySignal,RACErrorSignal。
- RACSteam抽象方法:empty,bind,concat,zipWith,無法直接使用
- 通過RAC的分類Opration中,map,take,skip,ignore,filter。
信號代表一連串的狀態
image.png
信號狀態改變時,對應的訂閱者RACSubscriber就會收到通知執行響應指令。
- RACSignal使用了類簇設計模式:返回的都是抽象的RACSignal(創建的不同對象)
- RACDynamic:將我們傳進來的block作為一個成員變量保存。
- RACReturn:覆蓋了父類的rerurn方法,對id對象進行包裝,然后返回,將OC對象封裝成一個信號返回給調用方。
訂閱
-
RACSubscriber訂閱流程:
image.png RACSubscriber訂閱內部原理:
1.當我們生成一個Subscriber類,內部持有一個成員變量:didSubscribe-Block。-
訂閱源碼:
image.png
image.png
ASyncDiplayKit
ASyncDiplayKit
減輕主線程的壓力,吧耗時的工作挪到子線程
1.解決布局的的耗時運算(文本寬高,視圖布局)子線程運算
2.渲染(Rendering):(文本渲染,圖片解碼,圖形繪制)異步繪制
3.對UIKit對象的操作(創建,調整,銷毀)
ASyncDiplayKit基本原理
- 在原生UI的基礎上封裝了一個ASNode類(成員:view,node),* 針對ASNode的修改和提交,會對齊進行封裝提交到一個全局容器中。
- ASDK在Runloop中注冊了一個Observer(beforeWaiting)。
- 當Runloop進入休眠前,ASDK執行該loop內提交的所有任務。
image.png