ios网络层优化深入浅出
網絡層是iOS開發必須掌握的部分,蘋果已經將網絡請求封裝得非常易用了,看看NSURLRequest和NSURLConnection的文檔,你就知道怎么用了,這里我就不細講了。本文主要講網絡層的調用邏輯,以及如何優化你的網絡請求,讓請求更有效率。
正常的網絡請求的過程一般經歷四個過程:
1.組裝Request對象,創建Connection對象,當Connection創建完畢后,系統底層會幫你完成3次握手、建立真正的連接等操作
2.收到回應,會調用ConnectionDelegate的didReceiveResponse方法,這是接收數據的第一步,你需要創建一個data緩沖區
3.然后一點點接收數據,會重復調用didReceiveData,這個方法被調用的次數取決于設備當時的網絡狀況和數據總量,你需要把接收到的數據一點點追加到data緩沖區里
4.接收完成,會調用connectionDidFinishLoading方法,表明數據全部接收完畢。
?
A:整個過程是異步的,但delegate方法永遠會在主線程執行,蘋果為保證動畫(如scrollView滑動)的流暢,給了動畫最高的優先級,所以界面動畫會阻塞以上任意一個過程,保證界面不被卡住。于是你應該明白了,盡量不要在做動畫的時候去發網絡請求,這是徒勞的。
B:當有若干個網絡請求同時發送時,connection對象可以幾乎同時被構建,但系統底層未必會為所有的連接對象都創建真正的網絡連接,至于底層最多能同時建立多少個真正的網絡連接,我還不清楚。建立了網路連接的請求,哪個先收到Response,就先處理哪個,處理的過程是2-3-4過程依次調用,直到一個請求處理完畢,才接收下一個。于是你應該明白了,要避免同時發送多個請求,尤其是關乎更新界面的請求,一定要單獨發。
C:如果網絡請求進行了一半時退出程序,大家都知道這時候程序會被掛起,那么網絡連接怎么辦呢?實際上當程序退出時,系統并不會立即掛起應用進程,而是會延遲大概一秒,如果這樣請求還是沒有完成,系統底層會默默地幫你把數據都接收完,幫你保存請求超時時間那么久。比如你設置超時時間30s,30s內重新打開應用,數據就立刻全都一次性收到,如果沒打開,不好意思,下次打開程序時,delegate的didFailWithError方法會被調用,通知你請求超時了。
總結
以上是生活随笔為你收集整理的ios网络层优化深入浅出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle RMAN中备份表空间名为'
- 下一篇: C语言数组作为传入参数