訪問網路的基本流程
同步請求與非同步請求的比較
//1、構建url位址
nsurl *url = [nsurl urlwithstring:@"**"];
//2、構建請求nsurlrequest,nsurlrequest:不可變物件,不能動態的新增請求資訊
nsmutableurlrequest *request = [nsmutableurlrequest requestwithurl:url];
[request sethttpmethod:@"get"]; 設定請求方式,都大寫
[request settimeoutinterval:60]; 設定超時時間
設定請求頭資訊
[request sethttpbody:data]; 設定請求體
[request setcachepolicy:nsurlrequestreturncachedataelseload]; 設定快取策略
//3、構造nsurlconnection
//傳送同步請求
nsdata *data = [nsurlconnection sendsynchronousrequest:request
returningresponse:&response
error:&error];
//4、獲取資料顯示---響應
//將data轉為字串
nsstring *jsonstr = [[nsstring alloc] initwithdata:data encoding:nsutf8stringencoding];
_textview.text = jsonstr;
//解析json資料
nsdictionary *dic = [nsjsonserialization jsonobjectwithdata:data
options:nsjsonreadingmutablecontainers
error:nil];
nslog(@"資料結果: %@", dic);
//5、獲取響應資訊
nsinteger statuscode = response.statuscode;
nsdictionary *allheaderfields = response.allheaderfields;
nslog(@"statuscode is %ld", statuscode);
nslog(@"allheaderfields is %@", allheaderfields);
//——————————非同步請求方法一:block示例
無法監聽資料,也無法監聽進度
//1、構建url
nsurl *url = [nsurl urlwithstring:@""];
//2、構建request
//新增資料請求—請求體
//3、傳送請求
nsoperationqueue *queue = [[nsoperationqueue alloc] init];
[nsurlconnection sendasynchronousrequest:request
queue:queue
completionhandler:^(nsurlresponse *response, nsdata *data, nserror *connectionerror)
//此時是在多執行緒中
nsstring *jsonstr = [[nsstring alloc] initwithdata:data encoding:nsutf8stringencoding];
//回到主線程中重新整理ui
dispatch_async(dispatch_get_main_queue(), ^);
}];
無法監聽資料,也無法監聽進度
//1、構建url
nsurl *url = [nsurl urlwithstring:@""];
//2、構建request
//新增資料請求—請求體
//3、傳送請求
nsoperationqueue *queue = [[nsoperationqueue alloc] init];
[nsurlconnection sendasynchronousrequest:request
queue:queue
completionhandler:^(nsurlresponse *response, nsdata *data, nserror *connectionerror)
//此時是在多執行緒中
nsstring *jsonstr = [[nsstring alloc] initwithdata:data encoding:nsutf8stringencoding];
//回到主線程中重新整理ui
dispatch_async(dispatch_get_main_queue(), ^);
}];
//1、構建url
nsurl *url = [nsurl urlwithstring:@""];
//2、構建request
//新增資料請求
//3、傳送請求
[nsurlconnection connectionwithrequest:request delegate:self];
/*通訊協議:nsurlconnectiondelegate
方法:1、nsurlconnectiondatadelegate
2、nsurlconnectiondownloaddelegate
子協議*/
#pragma mark -nsurlconnectiondatadelegate協議方法
//接受到伺服器的響應
//資料接收完成,在此方法中,把檔案寫進沙盒裡,
- (void)connectiondidfinishloading:(nsurlconnection *)connection;
//請求失敗時呼叫的協議方法
- (void)connection:(nsurlconnection *)connection didfailwitherror:(nserror *)error;
//將資料儲存進沙盒
//將接收到的資料儲存到沙盒裡
開闢乙個子執行緒,在子執行緒中同步請求,然後回到主線程設定ui
子執行緒呼叫的方法最好加到自動釋放池中去
@autoreleasepool
用[toc]
來生成目錄: 同步與非同步
同步執行模式 所謂同步執行模式,是指語句在同步執行模式下,將始終保持對程式流的控制,直至 程式結束。如查詢操作,客戶機上的應用程式在向伺服器發出查詢操作的指令後,將 一直等待伺服器將查詢結果返回客戶機端,然後才繼續進行下一步操作。眾所周知,應用程式要從乙個大表中刪除所有的記錄將是非常耗時的,如果應用...
同步與非同步
同步與非同步 所謂同步就是乙個任務的完成需要依賴另外乙個任務時,只有等待被依賴的任務完成後,依賴的任務才能算完成,這是一種可靠的任務序列。要麼成功都成功,失敗都失敗,兩個任務的狀態可以保持一致。而非同步是不需要等待被依賴的任務完成,只是通知被依賴的任務要完成什麼工作,依賴的任務也立即執行,只要自己完...
同步與非同步
1.所謂同步,可以理解為在執行完乙個函式或方法之後,一直等待系統返回值或訊息,這時程式是出於阻塞的,只有接收到返回的值或訊息後才往下執行其他的命令。非同步,執行完函式或方法後,不必阻塞性地等待返回值或訊息,只需要向系統委託乙個非同步過程,那麼當系統接收到返回值或訊息時,系統會自動觸發委託的非同步過程...