AFNetworking
-
整體架構(gòu)
-
主要關(guān)系圖:
AFURLSessionManger
- 創(chuàng)建和管理NSURLSession冯乘,NSURLSessionTask
- 實現(xiàn)NSURLSessionDelegate協(xié)議
- 引入AFSecurityPolicy保證數(shù)據(jù)請求安全
- 引入AFNetworkingReachabilityManger網(wǎng)絡監(jiān)控
AFNetworking的請求流程
1.請求GET方法(4個參數(shù)家乘,url,參數(shù),成功,失敗的回調(diào))
2.請求GET方法(5個參數(shù),url祭钉,參數(shù),進度赡麦,成功朴皆,失敗的回調(diào))
3.此方法生成一個NSURLSessionDataTask方法,并作為一個返回參數(shù)
4.通過requestSerializer請求序列化(請求方式泛粹,參數(shù),url序列化)肮疗,生成一個request(對HTTPHeader的封裝)
5.request創(chuàng)建好后調(diào)用dataTaskRequest方法:通過NSURLSession類調(diào)用dataTaskWithRequest系統(tǒng)方法晶姊。
6.添加dataTask代理方法:addDelegateForDataTask方法
7.setDelegate:ForTask:(傳入delegate,task)伪货,通過key/Value方式來綁定delegate(key為taskIdentifier)们衙。
SDWebImage
架構(gòu)簡圖
加載圖片的流程
ReactiveCocoa
- 函數(shù)式響應編程第三方庫
- 訂閱一個信號
- ReactiveCocoa中的核心類:RACSignal,繼承于RACSteam碱呼。
- RACSignal子類:RACDynamicSignal蒙挑,RACReturnSignal,RACEmptySignal愚臀,RACErrorSignal忆蚀。
- RACSteam抽象方法:empty,bind姑裂,concat馋袜,zipWith,無法直接使用
- 通過RAC的分類Opration中舶斧,map欣鳖,take,skip茴厉,ignore泽台,filter。
信號代表一連串的狀態(tài)
信號狀態(tài)改變時矾缓,對應的訂閱者RACSubscriber就會收到通知執(zhí)行響應指令怀酷。
- RACSignal使用了類簇設(shè)計模式:返回的都是抽象的RACSignal(創(chuàng)建的不同對象)
- RACDynamic:將我們傳進來的block作為一個成員變量保存。
- RACReturn:覆蓋了父類的rerurn方法而账,對id對象進行包裝胰坟,然后返回,將OC對象封裝成一個信號返回給調(diào)用方。
訂閱
-
RACSubscriber訂閱流程:
RACSubscriber訂閱內(nèi)部原理:
1.當我們生成一個Subscriber類笔横,內(nèi)部持有一個成員變量:didSubscribe-Block竞滓。-
訂閱源碼:
ASyncDiplayKit
ASyncDiplayKit
減輕主線程的壓力,吧耗時的工作挪到子線程
1.解決布局的的耗時運算(文本寬高吹缔,視圖布局)子線程運算
2.渲染(Rendering):(文本渲染商佑,圖片解碼,圖形繪制)異步繪制
3.對UIKit對象的操作(創(chuàng)建厢塘,調(diào)整茶没,銷毀)
ASyncDiplayKit基本原理
- 在原生UI的基礎(chǔ)上封裝了一個ASNode類(成員:view,node)晚碾,* 針對ASNode的修改和提交抓半,會對齊進行封裝提交到一個全局容器中。
- ASDK在Runloop中注冊了一個Observer(beforeWaiting)格嘁。
- 當Runloop進入休眠前笛求,ASDK執(zhí)行該loop內(nèi)提交的所有任務。