NSURLConnection
步驟
NSURL:確定要訪問的資源
NSURLRequest:根據(jù) URL 建立請求盲链,向服務(wù)器索要數(shù)據(jù)
NSURLConnection:建立網(wǎng)絡(luò)連接,將請求(異步)發(fā)送給服務(wù)器
示例代碼
// 1. `NSURL`:確定要訪問的資源
NSURL *url = [NSURL URLWithString:@"http://m.baidu.com"];
// 2. `NSURLRequest`:根據(jù) `URL` 建立請求依许,向服務(wù)器索要數(shù)據(jù)
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 3. `NSURLConnection`:建立網(wǎng)絡(luò)連接棺禾,將請求(異步)發(fā)送給服務(wù)器
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSLog(@"%@", data);
}];
NSURLConnection 代碼小結(jié)
sendAsynchronousRequest 發(fā)送異步請求
此方法就是異步執(zhí)行的,程序員無需考慮開啟線程悍手,或者創(chuàng)建隊(duì)列
會將之前建立好的請求異步發(fā)送給服務(wù)器
等到接收到服務(wù)器響應(yīng)后帘睦,由 queue 負(fù)責(zé)調(diào)度 completionHandler 的執(zhí)行
隊(duì)列
調(diào)度 completionHandler 執(zhí)行的隊(duì)列
[[NSOperationQueue alloc] init]袍患,后臺線程異步執(zhí)行
[NSOperationQueue mainQueue],主線程異步執(zhí)行
隊(duì)列的選擇
如果要對數(shù)據(jù)進(jìn)行耗時處理竣付,例如:解壓縮等诡延,選擇新建隊(duì)列調(diào)度
如果只是做簡單處理,立即更新 UI古胆,選擇主隊(duì)列
completionHandler
網(wǎng)絡(luò)訪問已經(jīng)結(jié)束肆良,接收到服務(wù)器響應(yīng)數(shù)據(jù)后的回調(diào)方法
response,服務(wù)器的響應(yīng)逸绎,通常在開發(fā)下載功能時才會使用
響應(yīng)屬性 說明
URL 服務(wù)器反饋的 URL惹恃,有的時候,服務(wù)器會重定向新的 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 客戶端錯誤
5XX 服務(wù)器錯誤
expectedContentLength 數(shù)據(jù)長度,下載文件總長度
suggestedFilename 建議的文件名
data 服務(wù)器返回的二進(jìn)制數(shù)據(jù)颊乘,程序員最關(guān)心的內(nèi)容
connectionError 連接錯誤参淹,任何網(wǎng)絡(luò)訪問都有可能出現(xiàn)錯誤
// 標(biāo)準(zhǔn)的錯誤處理方法
if (connectionError || data == nil) {
NSLog(@"網(wǎng)絡(luò)不給力!");
return;
}
請求
基于 URL 建立請求
設(shè)置請求屬性:緩存策略乏悄,網(wǎng)絡(luò)超時時長
告訴服務(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ù)
對數(shù)據(jù)的及時性要求高的應(yīng)用
例如:彩票、股票等
NSURLRequestReturnCacheDataElseLoad 2 如果有緩存规求,就返回緩存筐付,否則加載數(shù)據(jù)
NSURLRequestReturnCacheDataDontLoad 3 只加載緩存數(shù)據(jù),不去服務(wù)器上獲取
超時時長
默認(rèn)網(wǎng)絡(luò)時長是 60 s
建議超時時長 15~30 秒之間
注意超時時長不能太短
SDWebImage 的默認(rèn)超時時長是 15 秒
AFN 的默認(rèn)超時時長是 60 秒