ios網路層優化深入淺出

2021-09-06 10:46:23 字數 1044 閱讀 5982

網路層是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方法會被呼叫,通知你請求超時了。

網路程式設計深入淺出

不為人知的網路程式設計 一 tcp協議中的疑難雜症 上篇 不為人知的網路程式設計 二 tcp協議中的疑難雜症 下篇 不為人知的網路程式設計 三 關閉tcp連線時為什麼會time wait close wait 不為人知的網路程式設計 四 深入研究分析tcp的異常關閉 不為人知的網路程式設計 五 ud...

深入淺出sizeof

int佔 位元組,short佔 位元組 1.0 回答下列問題 答案在文章末尾 1.sizeof char 2.sizeof a 3.sizeof a 4.strlen a 如果你答對了全部四道題,那麼你可以不用細看下面關於sizeof的論述。如果你答錯了部分題目,那麼就跟著我來一起 關於sizeof...

深入淺出ShellExecute

ipconfig c log.txt應如何處理?二樓的朋友,開啟拔號網路這樣 shellexecute null,open c windows rundll32.exe shell32.dll,control rundll c windows system telephon.cpl null,sw ...