NSURLConnection

NSURLConnection

步驟

NSURL:確定要訪問的資源

NSURLRequest:根據(jù) URL 建立請(qǐng)求,向服務(wù)器索要數(shù)據(jù)

NSURLConnection:建立網(wǎng)絡(luò)連接,將請(qǐng)求(異步)發(fā)送給服務(wù)器


示例代碼

// 1. `NSURL`:確定要訪問的資源

NSURL *url = [NSURL URLWithString:@"http://m.baidu.com"];

// 2. `NSURLRequest`:根據(jù) `URL` 建立請(qǐng)求,向服務(wù)器索要數(shù)據(jù)

NSURLRequest *request = [NSURLRequest requestWithURL:url];

// 3. `NSURLConnection`:建立網(wǎng)絡(luò)連接,將請(qǐng)求(異步)發(fā)送給服務(wù)器

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

NSLog(@"%@", data);

}];

NSURLConnection 代碼小結(jié)

sendAsynchronousRequest 發(fā)送異步請(qǐng)求

此方法就是異步執(zhí)行的,程序員無需考慮開啟線程,或者創(chuàng)建隊(duì)列

會(huì)將之前建立好的請(qǐng)求異步發(fā)送給服務(wù)器

等到接收到服務(wù)器響應(yīng)后,由 queue 負(fù)責(zé)調(diào)度 completionHandler 的執(zhí)行

隊(duì)列

調(diào)度 completionHandler 執(zhí)行的隊(duì)列

[[NSOperationQueue alloc] init],后臺(tái)線程異步執(zhí)行

[NSOperationQueue mainQueue],主線程異步執(zhí)行

隊(duì)列的選擇

如果要對(duì)數(shù)據(jù)進(jìn)行耗時(shí)處理,例如:解壓縮等,選擇新建隊(duì)列調(diào)度

如果只是做簡(jiǎn)單處理,立即更新 UI,選擇主隊(duì)列

completionHandler

網(wǎng)絡(luò)訪問已經(jīng)結(jié)束,接收到服務(wù)器響應(yīng)數(shù)據(jù)后的回調(diào)方法

response,服務(wù)器的響應(yīng),通常在開發(fā)下載功能時(shí)才會(huì)使用

響應(yīng)屬性 說明

URL 服務(wù)器反饋的 URL,有的時(shí)候,服務(wù)器會(huì)重定向新的 URL

MIMEType

服務(wù)器告訴客戶端,返回的二進(jìn)制數(shù)據(jù)的類型

ContentType

根據(jù) MIMEType 客戶端就知道使用什么軟件處理返回的二進(jìn)制數(shù)據(jù)

網(wǎng)絡(luò)之所以這么豐富多彩,是因?yàn)橛蟹浅6嗟目蛻舳塑浖?/p>

statusCode 狀態(tài)碼

1XX消息

2XX 成功

3XX 更多選擇

4XX 客戶端錯(cuò)誤

5XX 服務(wù)器錯(cuò)誤

expectedContentLength 數(shù)據(jù)長(zhǎng)度,下載文件總長(zhǎng)度

suggestedFilename 建議的文件名

data 服務(wù)器返回的二進(jìn)制數(shù)據(jù),程序員最關(guān)心的內(nèi)容

connectionError 連接錯(cuò)誤,任何網(wǎng)絡(luò)訪問都有可能出現(xiàn)錯(cuò)誤

// 標(biāo)準(zhǔn)的錯(cuò)誤處理方法

if (connectionError || data == nil) {

NSLog(@"網(wǎng)絡(luò)不給力!");

return;

}

請(qǐng)求

基于 URL 建立請(qǐng)求

設(shè)置請(qǐng)求屬性:緩存策略,網(wǎng)絡(luò)超時(shí)時(shí)長(zhǎng)

告訴服務(wù)器額外信息:客戶端類型,身份驗(yàn)證...

// 告訴服務(wù)器,客戶端的類型是 iPhone,而且支持 AppleWebKit

[request setValue:@"iPhone AppleWebKit" forHTTPHeaderField:@"User-Agent"];

緩存策略

枚舉 數(shù)值 說明


NSURLRequestUseProtocolCachePolicy 0 默認(rèn)的緩存策略

NSURLRequestReloadIgnoringLocalCacheData 1

忽略本地緩存數(shù)據(jù),始終加載服務(wù)器的數(shù)據(jù)

對(duì)數(shù)據(jù)的及時(shí)性要求高的應(yīng)用

例如:彩票、股票等

NSURLRequestReturnCacheDataElseLoad 2 如果有緩存,就返回緩存,否則加載數(shù)據(jù)

NSURLRequestReturnCacheDataDontLoad 3 只加載緩存數(shù)據(jù),不去服務(wù)器上獲取


超時(shí)時(shí)長(zhǎng)

默認(rèn)網(wǎng)絡(luò)時(shí)長(zhǎng)是 60 s

建議超時(shí)時(shí)長(zhǎng) 15~30 秒之間

注意超時(shí)時(shí)長(zhǎng)不能太短

SDWebImage 的默認(rèn)超時(shí)時(shí)長(zhǎng)是 15 秒

AFN 的默認(rèn)超時(shí)時(shí)長(zhǎng)是 60 秒

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容